Предыстория: я учу себя анализу пакетов. Я запускаю очень простой сервер в одной оболочке, подключаюсь к нему из другой, а затем пробую разные методы для отслеживания трафика. Когда я использую сырые сокеты (IPPROTO_TCP), я получаю то, что отправляю нормально. Я фиксирую только то, что отправляю, ничего другого из интернета. Поведение libcap смущает меня следующим образом:
(1) Во-первых, чтобы проверить это, я фиксирую все устройства с помощью pcap_findalldevs (см. Также (2) ниже). Я нахожу Wlan0 хорошо. Если я подключаюсь ко «всему трафику» (на странице man), используя
if ( !( pcap_handle = pcap_open_live(NULL, 4096, 1, 0, errbuf) ) )
Я фиксирую то, что отправляю (плюс еще, см. (3))
когда я пытаюсь подключиться к нему, используя
if ( !( pcap_handle = pcap_open_live("wlan0", 4096, 1, 0, errbuf) ) )
, что мне кажется правильным способом сделать это, а не «все», я фиксирую много общего трафика, но ничего не отправляю. Идеи?
(2) Сначала я нахожу все устройства, использующие pcap_findalldevs. Поскольку структура pcap_if_t, возможно, имеет несколько элементов, я распечатываю все эти элементы, чтобы увидеть следующее:
Devices found:
1. eth0 - None:
family: 17, address: 2.0.0.0
2. wlan0 - None:
family: 17, address: 3.0.0.0
family: AF_INET, address: 192.168.0.159
family: 10, address: 0.0.0.0
3. usbmon1 - USB bus number 1:
4. usbmon2 - USB bus number 2:
5. usbmon3 - USB bus number 3:
6. usbmon4 - USB bus number 4:
7. usbmon5 - USB bus number 5:
8. any - Pseudo-device that captures on all interfaces:
9. lo - None:
family: 17, address: 1.0.0.0
family: AF_INET, address: 127.0.0.1
family: 10, address: 0.0.0.0
Я новичок в этом. Некоторые устройства предлагают захват AF_INET (= IPv4), IPv6 (10) и пакета (17). когда я подключаюсь к «wlan0», как это обеспечивается, когда я подключаюсь к правильным «адресам» какого-либо устройства? Это связано с проблемой?
(3) При использовании необработанных сокетов я действительно получаю только то, что отправил на свой сервер. Когда я использую libcap, я также фиксирую то, что из распечатанных байтов должно быть заголовками Интернета. Я новичок в этом. Если бы кто-то мог описать, что именно я записываю здесь, а что нет, на сырых сокетах, это было бы оценено. Это пакеты UDP или ICMP, которые, по определению, мой сокет IPPPROTO_TCP не будет перехватывать, поэтому я не видел тех, которые используют необработанные сокеты?
Большое спасибо.
Редактировать: я работаю под Ubuntu 10.04 на нетбуке Toshiba, используя комбо gcc / gdb.