tcpdump для печати только URL-адресов


Есть ли способ сделать

tcpdump -i lo -A 

И пусть он напечатает все URL-адреса, любые сделанные соединения?

Я сделал:

sudo tcpdump -i lo -A | grep Host: 

Который отлично работает. Но мне было интересно, есть ли варианты сделать то же самое в tcpdump

Наконец, есть ли способ сделать это в python без использования команды sys или Popen / subprocess

3 6

3 ответа:

Вы можете использовать scapy функцию sniff и использовать regex или grep

import scapy
tcpdump = sniff(count=5,filter="host 64.233.167.99",prn=lambda x:x.summary())
print tcpdump

Измените фильтр для вашего текста фильтра:)

Или, может быть, вы хотите сохранить трафик и посмотреть его в wireshark

wrpcap("temp.cap",pkts)

Tcpdump не может фильтровать на основе содержимого пакетов (нет глубокой проверки пакетов), так как он использует только pcacp-фильтр. Вы можете улучшить свою производительность, только сбрасывая эти пакеты для incoming TCP connections to your HTTP port.

tcpdump -i lo -A tcp port 80

TCPDUMP python: use Pcapy

Другой вариант-использовать tshark

То, что вы хотите использовать, - это libpcap, библиотека захвата пакетов, которую использует tcpdump. Для этого существует оболочка python, которую можно найти здесь.

Вы можете, в python, затем построить любую фильтрацию, которую вы хотите, поверх фильтрации, уже предоставленной pcap/tcpdump. Затем отобразите этот отфильтрованный вывод (или то, что вы хотите сделать в своем скрипте python).