Команды 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()

0 ответов

Другие вопросы по тегам