Tag: libpcap

发送802.11帧的“帧控制字段”数据的顺序?

以下是QoS数据的FC字段的位格式: 00|01|0001 01000010 前2位表示版本,下2位表示类型,下4位子类型,ToDS = 0,FromDS = 1,保护位= 1。 那么,上面的数据以什么顺序通过界面发送? (即从左到右或从右到左) 我看到wireshark将数据捕获为“ 8842 ”(在显示原始数据包数据的最后一段)。 但是,如果我编写以下代码来打印FC字段数据: struct mgmt_header_t { u_int16_t fc; /* 2 bytes */ u_int16_t duration; /* 2 bytes */ u_int8_t addr1[6]; /* 6 bytes */ u_int8_t addr2[6]; /* 6 bytes */ u_int8_t addr3[6]; /* 6 bytes */ u_int16_t seq_ctrl; /* 2 bytes */ }; […]

如何检查TCP结构中的标志是否已设置?

我正在使用pcap C库来读取数据包。 目前,我使用以下内容来检查并查看struct tcphdr的标志(此结构是否在netinet/tcp.h库中定义)是否已设置: struct tcphdr *tcp = …. if(tcp->th_flags & TH_SYN) { //SYN FLAG IS SET? } 这总是可以用于检查结构中是否设置了特定的标志? 或者,还有更好的方法? 非常感谢任何建议/提示:)

libpcap函数的root权限要求

当以非root用户身份运行时, pcap_lookupdev()填充errbuf变量,而以root身份运行时,相同的函数会返回第一个可用网络接口的值。 操作系统或库是否禁用此访问权限。 我认为这是操作系统。 什么是正确的答案? 这不是一个家庭作业问题

使用libpcap读取纳秒pcap文件

我有一个纳秒的libpcap(nanosec.pcap)文件,并且可以使用Wireshark显示纳秒时间戳(例如2.123456789)。 现在我想用C语言打开纳秒级libpcap文件,源代码如下。 当我尝试使用pcap_open_offine()打开nanosec.pcap时,它将返回“未知文件格式”错误。 此外,通过将nanosec.pcap标头处的幻数更改为普通pcap(0x1A2B3C4D)的幻数,我从终端(Ubuntu)获得了分段错误。 这里的任何专家都可以建议如何使用libpcap显示时间戳的纳秒部分? 提前致谢! 以下是代码: #include #include #include #include #include #include #include #include struct UDP_hdr { u_short uh_sport; /* source port */ u_short uh_dport; /* destination port */ u_short uh_ulen; /* datagram length */ u_short uh_sum; /* datagram checksum */ }; /* Some helper functions, which we define at the end of this […]

解析WiFi数据包(libpcap)

我一直在研究如何让一个OpenWRT路由器记录WiFi探测请求到MySQL数据库(它存储每个探测请求数据包的MAC地址和RSSI信息以及其他特定于路由器的数据)。 在研究了libpcap之后,我已经能够拼凑出一个基本的小程序,只需使用filter表达式(’wlan subtype probe-req’)在监视器接口(mon0)上嗅探数据包,然后输出原始数据包hex 有了libpcap在线提供的信息,这部分相当简单。 现在这里我被困住了: 如何解析WiFi数据包以检索我正在寻找的信息(RSSI和源MAC地址)? 要说清楚,我不是要求代码去做(虽然我不会抱怨,如果你想提供一些:D)。 我只是在寻找某种指导来理解哪个字节是哪个 – 如果你愿意的话,那就是WiFi数据包路线图。 有一些很好的教程可以解析通过以太网进入的数据包,但是我无法找到任何可以帮助解析与WiFi特定相关的标头。 我假设它将是一个非常简单的过程 – 只需抓取RSSI和源MAC的相关字节 – 但同样,我还没有找到任何关于哪个字节的文档。 我知道这已经完成了,但我会说实话:在查看tcpdump的源代码时,我完全迷失了。 那么,有没有人知道如何解析WiFi数据包的良好资源? 干杯 编辑:更具体的答案 RSSI位于RadioTap标题中(嗯,在Linux上)。 使用radiotap-parser.c以及它所依赖的文件(在与我链接的文件相同的目录中找到)将RSSI从数据包中拉出是相当简单的。 如果有人在使用radiotap-parser.c时遇到问题,请随时与我们取得联系。 通过radiotap函数拉出源MAC地址非常容易,因为radiotap头结构包含radiotap头( it_len )的长度,它是可变的。 因为我只解析具有固定长度的探测请求( 在这里查看第17页),所以只需要指向指向packet + it_len + 10的指针(源MAC地址在MAC开始后10个字节开始)框架,从radiotap标头结束的地方开始)。 从该指针开始的6个字节是802.11帧中的addr2 (同样,请参见此处的第17页)。