gpt4 book ai didi

对 libcap (pcap) 和无线感到困惑

转载 作者:太空狗 更新时间:2023-10-29 15:36:49 25 4
gpt4 key购买 nike

背景:我正在自学数据包嗅探。我在一个 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 时,我还从打印出的字节中捕获必须是 Internet header 的内容。我对此很陌生。如果有人可以详细说明我在这里捕获的到底是什么,而我没有在原始套接字上捕获,我们将不胜感激。根据定义,我的 IPPPROTO_TCP 套接字不会捕获那些 UDP 或 ICMP 数据包,这就是为什么我没有看到那些使用原始套接字的原因?

非常感谢。

编辑:我在东芝上网本上的 Ubuntu 10.04 下工作,使用 gcc/gdb 组合。

最佳答案

  1. 有点令人惊讶的是,当在 wlan0 上捕获时,您看不到您发送的数据包,如果它们实际上是通过您的 Wi-Fi 设备发送的。您是否将它们发送到 Wi-Fi 网络上的其他机器?例如,如果您将它们发送到您机器上的其他进程,它们将显示在 lo 上,而不是 wlan0(如果您将它们发送到其他进程您的 Wi-Fi 网络上的机器,而不是您机器上的其他进程,它们不会出现在 lo 上 - 不,所有流量最终不会通过环回接口(interface))。
  2. 您从 pcap_findalldevs() 获得的地址列表不是您可以在该接口(interface)上捕获的地址列表,它只是网络地址列表系统具有该接口(interface)。您不必选择要捕获的地址 - 它会捕获所有地址。您在接口(interface)而非地址上捕获。
  3. Libpcap 不同于原始套接字;它为您提供比正在发送或接收的数据以及该数据的低层 header 。对于以太网设备,您会看到以太网 header ;对于 Wi-Fi 设备,您看到的内容取决于您所使用的操作系统和您选择的 header (在您正在使用的 Linux 上,您可能会看到以太网 header ,除非您在“监控模式”下捕获,在这种情况下,您将看到 Wi-Fi header 或一些“ radio ” header ,例如 radiotap header ,后跟 Wi-Fi header );对于“任何”设备,您将看到“Linux cooked headers”;等等。您需要在调用 pcap_open_live() 之后调用 pcap_datalink() 来找出接口(interface)的 header 类型;见the list of link-layer types (pcap_datalink() 将返回 DLT_ 值,如此处所列;不要假设给出的数字与 DLT_ 值相同, 按名称与 DLT_ 值进行比较)。

关于对 libcap (pcap) 和无线感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com