【发布时间】:2011-11-13 10:26:48
【问题描述】:
背景:我正在自学数据包嗅探。我在一个 shell 中运行一个非常简单的服务器,从另一个 shell 远程登录到它,然后尝试不同的方法来嗅探流量。当我使用原始套接字(IPPROTO_TCP)时,我捕获了我发送的内容。我只捕获我发送的内容,没有其他来自互联网的内容。 libcap 的行为让我感到困惑如下:
(1) 首先,为了检查它,我使用 pcap_findalldevs 捕获所有设备(也请参见下面的 (2))。我觉得 wlan0 很好。如果我使用
连接到“所有流量”(根据手册页)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 时,我还从打印出的字节中捕获必须是 Internet 标头的内容。我对此完全陌生。如果有人可以详细说明我在这里捕获的我没有在原始套接字上捕获的内容,我将不胜感激。是那些 UDP 或 ICMP 数据包,根据定义,我的 IPPPROTO_TCP 套接字不会捕获,这就是为什么我没有看到使用原始套接字的那些?
非常感谢。
编辑:我在东芝上网本上的 Ubuntu 10.04 下工作,使用 gcc/gdb 组合。
【问题讨论】:
-
抱歉,设备 p/o 的格式混乱。提交时看起来不错。
-
那你为什么不编辑和修复它呢?