背景知识:我正在自学数据包嗅探。我在一个shell中运行一个非常简单的服务器,从另一个shell telnet到它,然后尝试不同的方法来嗅探流量。当我使用原始套接字(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时,我还会从打印出的字节中捕获一定是互联网头文件的内容。我对此还是个新手。如果有人能详细说明我在这里捕获了哪些未在原始套接字上捕获的内容,我将不胜感激。根据定义,我的IPPPROTO_TCP套接字不会捕获这些UDP或ICMP数据包吗?这就是为什么我看不到那些使用原始套接字的数据包?
非常感谢。
编辑:我在Ubuntu10.04下工作,使用的是东芝上网本,使用的是gcc/gdb组合。
发布于 2011-10-19 08:30:11
wlan0
上捕获时,你看不到你发送的数据包,如果它们实际上是通过你的Wi-Fi设备发送的。您是否将它们发送到Wi-Fi网络上的其他计算机?例如,如果您正在将它们发送到您计算机上的其他进程,它们将显示在lo
上,而不是wlan0
上(如果您将它们发送到Wi-Fi网络上的其他计算机,而不是您计算机上的其他进程,它们将不会显示在lo
上-不,所有流量最终都不会通过环回pcap_findalldevs()
地址列表。您从该接口获取的地址列表不是您可以在该接口上捕获的地址列表,而只是系统具有该接口的网络地址列表。您不能选择要捕获的地址-它会捕获所有地址。在接口上捕获,address.pcap_open_live()
之后,您需要调用pcap_datalink()
来找出接口的头类型;请参见the list of link-layer types (pcap_datalink()
将返回DLT_
值,如此处所列;不要假设给定的数字与DLT_
值相同,请按名称与DLT_
值进行比较)。https://stackoverflow.com/questions/7356000
复制相似问题