Использование Python для поиска в файле PCAP и возврата ключевой информации о поисковом запросе - PullRequest
0 голосов
/ 19 марта 2019

Нам был предоставлен файл PCAP, и моя работа состоит в том, чтобы найти:

До того, как пользователь заразился / подвергся атаке, он использовал популярную поисковую систему (не Google) для поиска некоторой информации.Используйте Python, чтобы узнать 1) какую поисковую систему и 2) какие ключевые слова они использовали для таких поисков.3) Какой веб-сайт рекомендовал поисковик и 4) к какому веб-сайту на самом деле обратился пользователь?

Открыв файл PCAP на Wireshark, я уже нашел правильный ответ:Bing

, хотя я до сих пор не смог определить части 2, 3 и 4

Однако это, очевидно, не является целью назначения, так как я должен использовать Python для возврата информации

У меня есть код:

pcapfile = open('nameofpcapfile.pcap', 'rb')

x = pcapfile.read()
decoded = x.decode("iso-8859-1")

searchengines = ["www.google.com", "www.yahoo.com", "www.ask.com", "www.bing.com",
                 "www.aol.com", "www.baidu.com", "www.wolframalpha.com",
                 "www.duckduckgo.com", "www.yandex.ru"]

searchenginesfound = []

for i in searchengines:
    if i in decoded:
        searchenginesfound.append(i)


if searchenginesfound.__len__() == 0:
    print("Search engine not found")
elif searchenginesfound.__len__() == 1:
    print("Search Engine used: ", searchenginesfound)
elif searchenginesfound.__len__() > 1:
    print("Search Engines used: ", searchenginesfound)

Этот код может успешно вернуть bing.com в качестве поисковой системы.Однако я понятия не имею, что делать с частями 2, 3 и 4

Есть предложения?

1 Ответ

0 голосов
/ 19 марта 2019

pcaps имеют строгий формат, что позволяет разграничивать различные пакеты. В идеальном мире вам потребуется реализовать анализатор pcap, позволяющий получать каждый пакет один за другим для изучения. Вы использовали более тяжелый способ, который просто анализирует все как текст (который работает в вашем очень конкретном случае :-)), так что это то, что я буду документировать. Тем не менее, я действительно рекомендую вам разобраться в этом: гораздо проще, когда у вас есть каждый пакет как свой.

Если вам разрешено использовать библиотеку, некоторые из них, такие как scapy или dpkt, могут помочь вам разобрать pcaps.

Во-первых, вам нужно знать, что вы ищете. Ключевые слова - это параметры, связанные с HTTP-запросом. Поскольку вы анализируете его как файл, он соответствует аргументам URL ? и &, таким как http://www.example.org/?param1=foo&param2=bar

В вашем случае, поскольку вы ищете Bing, вот список параметров, которые вы можете найти: https://docs.microsoft.com/en-us/rest/api/cognitiveservices/bing-web-api-v5-reference#query-parameters

Чтобы получить их, сначала нужно извлечь все URL. Для этого вы можете использовать регулярное выражение и встроенный модуль Python re. Ищите хороший онлайн, например вот тот, который я нашел для HTTP:

regex = r"/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/"

Тогда вам нужно будет re.search(regex, decoded), а затем использовать groups() (посмотрите в Интернете :-)), чтобы найти все URL-адреса. После этого вы сможете split("&") получить различные ключевые слова.

Для 3) и 4) вам нужно найти следующие HTTP ответы и запросы. Вот где реализация парсера pcap становится хитрой, так как вам нужно угадать, где они находятся в вашем фрагменте текста. Вероятно, вы можете искать теги HTTP в том виде, в каком они были до и после HTTP-запросов, но это грязно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...