Я пытаюсь открыть Tcpdump для захвата UDP-пакетов из сценария Python. Вот мой код:Tcpdump: невозможно захватить пакеты из сценария Python
os.system("tcpdump -i wlp2s0 -n dst 8.8.8.8 -w decryptedpackets.pcap &")
testfile = urllib.URLopener()
s = socket(AF_INET, SOCK_DGRAM)
host = "8.8.8.8"
port = 5000
buf = 1024
addr = (host, port)
s.connect((host, port))
f = open("file.txt", "rb")
data = f.read(buf)
while (data):
if (s.sendto(data, addr)):
print "sending ..."
data = f.read(buf)
Я могу захватить пакеты (PCAP файл имеет содержание), если я вручную выполнить эту команду в оболочке:
tcpdump -i wlp2s0 -n dst 8.8.8.8 -w decryptedpackets.pcap &
Однако, если я использую os.system () Я не могу захватить пакеты. (Когда я открываю файл PCAP, я считаю это пустым)
Я проверил и обнаружил, что это процесс, который будет создаваться, когда сценарий Python выполняется:
корневых 10092 0,0 0,0 17856 1772 очков/19 S 10:25 0:00 ТСРйитр -i -n wlp2s0 ДСТ 8.8.8.8 -w decryptedpackets.pcap
Кроме того, я бегу это как пользователь SUDO, чтобы избежать каких-либо проблем с правами доступа.
Любые предложения, которые могут вызывать эту проблему?
Что именно * есть * проблема? У вас есть 'tcpdump' записи пакетов в файл' .pcap'. И ваш вывод 'ps' показывает, что он успешно запущен. Так что эта часть, похоже, работает. Но тогда вы открываете файл.txt' и отправляет его содержимое на удаленный хост. Чего вы ожидали? –
Проблема в том, что если я выполняю команду os.system(), файл pcap пуст без захваченных пакетов. Однако, если я вручную запускаю команду tcpdump в оболочке, файл pcap имеет содержимое –
Не используйте '&' и выбирайте хорошую альтернативу из модуля 'subprocess'. –