Tag: pcap

PCAP Ethertype返回

我试图识别我收到的数据包的以太类型。 以太类型ID为608,在Ethertype.h(libpcap 1.2.1)中没有相应的定义。 收到的大多数数据包都有8的类型,在Ethertype.h中也没有相应的定义。 有没有人知道原因可能背后是什么,或者我应该联系TCPDump与错误报告。

读取savefiles时,linktype 1上不支持入站/出站

从pcap文件获取传入数据包。 我在pcap_compile()中设置了“入站”filter,这里是部分代码。 pcap = pcap_open_offline(“test.pcap”, errbuf); if (pcap == NULL) { fprintf(stderr, “error reading pcap file: %s\n”, errbuf); exit(1); } char filter_exp[] = “inbound”; struct bpf_program pgm; if (pcap_compile(pcap, &pgm, filter_exp, 0, PCAP_NETMASK_UNKNOWN) == -1) { printf(“Bad filter – %s\n”, pcap_geterr(pcap)); return 1; } if (pcap_setfilter(pcap, &pgm) == -1) { printf(“Error setting filter – %s\n”, […]

重建数据包以通过pcap注入

情况就是这样:在我的场景中,我有3台电脑,A,B和C. 计算机A将数据发送到计算机B.计算机B使用pcap捕获这些数据包,附加标头,重做校验和,然后将另一个以太网接口注入计算机C.所以基本上A发送到C,尽管从C的角度来看,数据来自计算机B. 我的问题是:在TCPDUMP关于剖析捕获的数据包的教程之后,我学会了计算偏移并使用类型转换来获取以太网,ip和tcp头结构。 这样做的方法如下所示: ethernet = (struct sniff_ethernet*)(packet); ip = (struct sniff_ip*)(packet + SIZE_ETHERNET); size_ip = IP_HL(ip)*4; if (size_ip < 20) { printf(" * Invalid IP header length: %u bytes\n", size_ip); return; } tcp = (struct sniff_tcp*)(packet + SIZE_ETHERNET + size_ip); size_tcp = TH_OFF(tcp)*4; if (size_tcp < 20) { printf(" * Invalid TCP header length: […]

802.11 FCS(CRC32)

以下代码是否正确计算无线802.11帧的FCS值? 因为以下代码生成的值与wireshark显示的值不匹配。 const uint32_t crctable[] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, […]

使用pcap从802.11帧处理不正确的mac地址

我正在通过pcap和无线工作。 根据我之前的问题回复发布的示例,我试图从无线帧中提取mac地址。 我已经为radiotap头和基本管理框架创建了结构。 出于某种原因,当涉及到尝试输出mac地址时,我打印出错误的数据。 当我与wireshark比较时,我不明白为什么无线电分接数据正确打印出来但mac地址却没有。 当我查看数据包并比较我捕获的数据包时,我看不到wireshark显示的hex转储中的任何额外填充。 我有点熟悉c而不是专家所以也许我没有正确使用指针和结构有人可以帮助告诉我我做错了什么? 谢谢,昆汀 // main.c // MacSniffer // #include #include #include #define MAXBYTES2CAPTURE 65535 #ifdef WORDS_BIGENDIAN typedef struct frame_control { unsigned int subtype:4; /*frame subtype field*/ unsigned int protoVer:2; /*frame type field*/ unsigned int version:2; /*protocol version*/ unsigned int order:1; unsigned int protected:1; unsigned int moreDate:1; unsigned int power_management:1; unsigned […]

为什么pcap_datalink()总是返回1(以太网),即使在无线设备上也是如此?

我遇到的问题是pcap_datalink()总是返回1 。 根据我的理解,这是LINKTYPE_ETHERNET 。 但是,我使用的设备是无线网卡,在我的情况下是en0 。 这使我无法将卡置于监控模式,并阻止我的WLANfilter工作。 我试图在OSX和Linux上运行它,结果相同。 我也是以root身份运行的。 这是我的代码中导致问题的部分。 例如,假设dev设置为en0 (Mac上的无线设备)。 #include #include #include int main(int argc, char *argv[]) { pcap_t *pcap_h; char *dev, errbuf[PCAP_ERRBUF_SIZE]; struct bpf_program fp; struct pcap_pkthdr header; const u_char *packet; if(argc < 2) { printf("Usage: %s device\n", argv[0]); exit(EXIT_FAILURE); } dev = argv[1]; if((pcap_h = pcap_create(dev, errbuf)) == NULL) { […]

我可以使用pcap库接收ipv6数据包吗?

我正在尝试将hping3转换为hping6。 hping3使用Pcap库接收IPv4数据包。 但我需要接收IPv6数据包。

如何在c 使用pcap执行扫描附近的wifi ap

基本上我想要一个简单的C代码,它说明了在混杂模式下捕获数据包并从中提取出ssid。 EDIT1 我正在编写我编写的代码来执行基本的嗅探。 #include #include int main(int argc, char *argv[]){ pcap_t *handle; struct pcap_pkthdr header; const u_char *packet; int i; char *dev, errbuf[PCAP_ERRBUF_SIZE]; // dev = pcap_lookupdev(errbuf); dev = argv[1]; if( dev == NULL ){ fprintf(stderr, “Couldn’t find default device\n”); return 0; } printf(“Device: %s\n”, dev); handle = pcap_open_live( dev , BUFSIZ , 0 , […]

由libcap(pcap)和无线混淆

背景:我正在教自己关于数据包嗅探。 我在一个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: […]

从PCap文件读取并打印出c中的IP地址和端口号,但我的结果似乎不对

我正在读一个pcap文件,我想打印出每个数据包的IP地址和端口号。 我正在使用来自http://www.tcpdump.org/pcap.htm和http://www.rhyous.com/2011/11/13/how-to-read-a-pcap-file-from-wireshark的代码-with-c / 。 这是我的代码: #define SIZE_ETHERNET 14 #define ETHER_ADDR_LEN 6 /* Ethernet header */ struct sniff_ethernet { u_char ether_dhost[ETHER_ADDR_LEN]; /* Destination host address */ u_char ether_shost[ETHER_ADDR_LEN]; /* Source host address */ u_short ether_type; /* IP? ARP? RARP? etc */ }; /* IP header */ struct sniff_ip { u_char ip_vhl; /* version <> 2 */ […]