Напишите файл pcap о TCP-трафике веб-сканера - PullRequest
1 голос
/ 01 ноября 2019

URL-запрос и снифф (count = x) не работают вместе. sniff (count) ожидает x пакетов, чтобы прослушать, и хотя мне нужно поставить строку перед url-запросом, который блокирует программу, url-запрос никогда не запускается и никогда не прослушивает какой-либо пакет.

Когда я открыл 2 Windows в командной строке Ubuntu, это сработало. В первом окне я активировал интерактивный режим python и активировал сниффер. После этого я запустил веб-сканер во втором окне, и анализатор в 1-м окне правильно получил пакеты и поместил их на экран / в pcap-файл.

Теперь самым простым способом будетнаписать 2 скрипта и запустить их из 2 разных Windows, но я хочу выполнить всю работу в одном скрипте: веб-сканирование, прослушивание пакетов и помещение их в pcap-файл

Вот код, который неработа:

class spider():
…
    def parse():
        a = sniff(filter="icmp and host 128.65.210.181", count=1)
        req = urllib.request.urlopen(self.next_url.replace(" ",""))
        a.nsummary()
        charset = req.info().get_content_charset()

Теперь первая строка блокирует программу, ожидая 4 пакета, что не может сделать, потому что только в следующей строке выполняется запрос. Смена линий также не работает. Я думаю, что единственный способ решить эту проблему - это работать с параличами, поэтому я также попробовал это:

class protocoller(): 
    ...
    def run(self):
         self.pkt = sniff(count=5) # and here it blocks
…
prot = protocoller()
Main.thr = threading.Thread(target=prot.run())
Main.thr.start()

Я всегда думал, что поток выполняется независимо от основной программы, но он блокируетэто как если бы это было частью этого. Любые предложения?

Так что мне нужно решение, в котором веб-сканер и протокол IP / TCP на основе scapy работают независимо друг от друга.

Может ли sr ()-функция scapy будет альтернативой?

https://scapy.readthedocs.io/en/latest/usage.html

Можно ли вручную поместить запрос в пакет и поместить полученный пакет в pcap-файл?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Другой ответ прекрасно работает. К вашему сведению, Scapy 2.4.3 также имеет встроенный способ сделать это:

https://scapy.readthedocs.io/en/latest/usage.html#asynchronous-sniffing

2 голосов
/ 01 ноября 2019

Ваш пример не показывает, что происходит в других потоках, поэтому я предполагаю, что у вас есть второй поток, чтобы выполнить запрос и т. Д. Если все в порядке, очевидная ошибка здесь:

Main.thr = threading.Thread(target=prot.run())

Выполняет функцию prot.run и передает результат параметру target Thread. Должно быть:

Main.thr = threading.Thread(target=prot.run)

Передача самой функции в Thread

...