Команды tcprewrite, выполняемые с использованием команд подпроцесса, выполняются успешно только один раз, но в остальное время не выполняются.
Я работаю в состоянии, когда при использовании модуля Python для подпроцесса код для "tcprewrite" не выполняется постоянно, за исключением случаев, когда я удаляю строки кода и переписываю его снова, а затем запускаю программу. Затем он запускается один раз, а остальное время начинает выходить из строя. У меня никогда не было проблемы с командами "tshark". Кроме того, когда я запускаю эту команду из интерпретатора Python, она всегда работает как шарм. Только когда я запускаю его из модуля Python, я сталкиваюсь с этой проблемой.
command4 = 'tcprewrite --dstipmap=' + natted_clients_ip + ':' + clients_ip + '
--portmap=' + s2c_dport_to_be_changed + ':' + c2s_sport + ' --infile=s2c-' +
rx_stage_pcap + ' --outfile=trw-s2c-' + rx_stage_pcap
p4 = subprocess.Popen(command4,shell=True,bufsize=-1,stdout=subprocess.PIPE)
p4.terminate()
command41 = 'tshark -r trw-s2c-' + rx_stage_pcap
p41 = subprocess.Popen(command41,shell=True,bufsize=-1,stdout=subprocess.PIPE)
p41_stdout = p41.communicate()[0]
print('\n\ttrw-s2c-'+rx_stage_pcap+'\n' )
print(p41_stdout.decode('utf-8'))
p41.terminate()
Вот вывод, когда он работает нормально только один раз, модуль подпроцесса успешно выполняет команду "tcprewrite", и мы можем видеть содержимое нового файла pcap (созданного командой tcprewrite), используя "tshark -r "команда.
(ниже приведены значения передаваемых переменных, и вот так выглядит команда4: rx_stage_pcap = "test2.pcap", natted_clients_ip = "10.73.65.90", clients_ip = "172.20.100.143", s2c_dport_to_be_changed="50122", c2s_sport="53264")
>>>
>>> command4 = 'tcprewrite --dstipmap=' + natted_clients_ip + ':' + clients_ip + ' --portmap=' + s2c_dport_to_be_changed + ':' + c2s_sport + ' --infile=s2c-' + rx_stage_pcap + ' --outfile=trw-s2c-' + rx_stage_pcap
>>> command4
'tcprewrite --dstipmap=10.73.65.90:172.20.100.143 --portmap=50122:53264 --infile=s2c-test2.pcap --outfile=trw-s2c-test2.pcap'
>>>
S2C-test2.pcap
1 0.000000 213.211.198.62 10.73.65.90 TCP 66 80 50122 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
2 0.131879 213.211.198.62 10.73.65.90 TCP 54 80 50122 [ACK] Seq=1 Ack=561 Win=30336 Len=0
3 0.154104 213.211.198.62 10.73.65.90 TCP 1514 [TCP segment of a reassembled PDU]
4 0.154226 213.211.198.62 10.73.65.90 TCP 1514 [TCP segment of a reassembled PDU]
5 0.154346 213.211.198.62 10.73.65.90 TCP 63 [TCP Previous segment not captured] [TCP segment of a reassembled PDU]
6 0.154355 213.211.198.62 10.73.65.90 TCP 1514 [TCP Out-Of-Order] 80 50122 [ACK] Seq=2921 Ack=561 Win=30336 Len=1460
TRW-S2C-test2.pcap
1 0.000000 213.211.198.62 172.20.100.143 TCP 66 80 53264 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
2 0.131879 213.211.198.62 172.20.100.143 TCP 54 80 53264 [ACK] Seq=1 Ack=561 Win=30336 Len=0
3 0.154104 213.211.198.62 172.20.100.143 TCP 1514 [TCP segment of a reassembled PDU]
4 0.154226 213.211.198.62 172.20.100.143 TCP 1514 [TCP segment of a reassembled PDU]
5 0.154346 213.211.198.62 172.20.100.143 TCP 63 [TCP Previous segment not captured] [TCP segment of a reassembled PDU]
6 0.154355 213.211.198.62 172.20.100.143 TCP 1514 [TCP Out-Of-Order] 80 53264 [ACK] Seq=2921 Ack=561 Win=30336 Len=1460
Но когда я снова запускаю программу для того же файла pcap, она перестает работать, как показано ниже:
S2C-test2.pcap
1 0.000000 213.211.198.62 10.73.65.90 TCP 66 80 50122 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=128
2 0.131879 213.211.198.62 10.73.65.90 TCP 54 80 50122 [ACK] Seq=1 Ack=561 Win=30336 Len=0
3 0.154104 213.211.198.62 10.73.65.90 TCP 1514 [TCP segment of a reassembled PDU]
4 0.154226 213.211.198.62 10.73.65.90 TCP 1514 [TCP segment of a reassembled PDU]
5 0.154346 213.211.198.62 10.73.65.90 TCP 63 [TCP Previous segment not captured] [TCP segment of a reassembled PDU]
6 0.154355 213.211.198.62 10.73.65.90 TCP 1514 [TCP Out-Of-Order] 80 50122 [ACK] Seq=2921 Ack=561 Win=30336 Len=1460
tshark: The file "trw-s2c-test2.pcap" doesn't exist.
trw-s2c-test2.pcap
Может ли кто-нибудь помочь мне с тем, как всегда получать согласованные результаты при передаче команд tcprewrite через подпроцессы.
У меня похожие проблемы при использовании системных вызовов os.s или shlex для анализа команды и передачи в подпроцесс:
cm4 = shlex.split("tcprewrite --dstipmap=%s:%s --portmap=%s:%s --infile=s2c-%s --outfile=trw-s2c-%s" %(natted_clients_ip,clients_ip,s2c_dport_to_be_changed,c2s_sport,rx_stage_pcap,rx_stage_pcap))
c4= subprocess.Popen(cm4)
c4.terminate()
command41 = 'tshark -r trw-s2c-' + rx_stage_pcap
p41 = subprocess.Popen(command41,shell=True,bufsize=-1,stdout=subprocess.PIPE)
p41_stdout = p41.communicate()[0]
print('\n\ttrw-s2c-'+rx_stage_pcap+'\n' )
print(p41_stdout.decode('utf-8'))
p41.terminate()