如何在c语言中使用cap扫描附近的wifi应用?
基本上我想要一个简单的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;
2 2024-04-10
编程技术问答社区
编译时PCAP程序出错
这是一个程序,可以从网络适配器获取源和目标地址.试图编译以下程序时,我遇到了错误.有人对这些错误有任何想法吗?谢谢 #include #include #include "packet32.h" #include #include #include #define PCAP_DONT_INCLUDE_PCAP_BPF_H #include #define SIZE_ETHERNET 14 #define ETHER_ADDR_LEN 6 #define PCAP_ERRBUF_SIZE 30 /* Ethernet header */ struct sniff_ethernet { u_char ether_dhost[E
0 2024-04-10
编程技术问答社区
什么是pcap, pcap_t, errbuf[PCAP_ERRBUF_SIZE]
嗨,我是C编程的新手.谁能告诉我什么是errbuf [pcap_errbuf_size],pcap,pcap_t和pcap_lookupdev()工作 如何 struct pcap_pkthdr header; const unsigned char *packet; char errbuf[PCAP_ERRBUF_SIZE]; char *device; pcap_t *pcap_handle; int i; device = pcap_lookupdev(errbuf); 解决方案 什么是errbuf [pcap_errbuf_size] 一些LIBPCAP例程,如果失败,则将错误消息放入缓冲区中,以便使用LIBPCAP的程序可以向用户报告错误. pcap_lookupdev()是这些例程之一;如果它返回NULL,则意味着它找不到任何可以打开的设备,因此将错误消息放入errbuf. 中 PCAP " pcap"是一个有时用于libpcap
2 2024-04-09
编程技术问答社区
PCAP以太网类型返回
我正在尝试识别我要收到的数据包的以太类型.以太类型ID为608,在Ethertype.h(libpcap 1.2.1)中没有相应的定义.收到的大多数数据包都有一种8种类型,在Ethertype.h中又没有相应的定义.有人对这可能是什么原因有什么想法,还是我应该通过错误报告与TCPDUMP联系. 解决方案 您要捕获的pcap_t上的返回值是多少? 如果不是DLT_EN10MB(具有值1),则您的数据包不是以太网数据包,而您不应该将其解析为以太网数据包. 如果是DLT_EN10MB,那是608还是十进制608?如果是十进制的608,则是一个长度字段,而不是类型字段.相同的8个,它是相同的十进制或十六进制,因此是长度值而不是类型值. 其他解决方案 来自manpage: " ntohs()函数将未签名的短整数网络从网络字节顺序转换为主机字节顺序." 来自我的代码: if(ntohs(ethernet-> ether_type)== 0x0800)..
0 2024-04-09
编程技术问答社区
读取保存文件时,在链接类型1上不支持入站/出站
从PCAP文件中获取传入数据包.我在pcap_compile()中设置了"入站"过滤器,这是部分代码. 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) ==
4 2024-04-09
编程技术问答社区
用pcap处理802.11帧中不正确的mac地址
我正在使用PCAP和无线的项目工作.按照响应OE的示例,我正在尝试从无线框架中提取MAC地址.我为Radiotap标头创建了结构和基本管理框架.由于某种原因,在尝试输出MAC地址时,我正在打印错误的数据.当我与Wireshark进行比较时,我不明白为什么无线电抽头数据正确打印出来,但MAC地址却没有.当我查看数据包并比较我捕获的数据包时,我在Wireshark显示的十六进制转储中看不到任何其他填充物.我对C有些著名,但不是专家,所以也许我没有正确使用指针和结构,有人可以帮助我向我展示我在做错什么? 谢谢 昆汀 // main.c // MacSniffer // #include #include #include #define MAXBYTES2CAPTURE 65535 #ifdef WORDS_BIGENDIAN typedef struct frame_control { unsign
0 2024-04-09
编程技术问答社区
被libcap(pcap)和无线混淆了
背景:我正在自我教育数据包嗅探.我在一个外壳中运行一个非常简单的服务器,从另一个外壳运行telnet,然后尝试使用不同的方法来嗅探流量.当我使用RAW插座(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) ) ) 对我来说,这似乎是做到这一点的正确方法,而不是"全部",我捕获了很多一般的
0 2024-04-08
编程技术问答社区
为什么 pcap_datalink() 总是返回 1(以太网),即使在无线设备上?
我遇到一个问题,pcap_datalink()总是返回1.据我了解,这是LINKTYPE_ETHERNET.但是,我使用的设备是无线卡,在我的情况下en0. 这使我无法将卡放入监视模式,并阻止我的WLAN过滤器工作.我试图在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
4 2024-04-08
编程技术问答社区
从PCap文件中读取并在c语言中打印出IP地址和端口号,但我的结果似乎不对
我正在阅读一个PCAP文件,我想打印每个数据包的IP地址和端口号.我正在使用 http://www.tcpdump.org/pcap.org/pcap.htm href =" http://www.rhyous.com/2011/11/11/13/how-to-to-to-read-a-pcap-file-file-from-wireshark-with-with-with-with-c/" rel =" nofollow"> http://www.rhyous.com/2011/11/13/how-to-to-read-a-pcap-file-file-from-wireshark-with-with-c/. 这是我的代码: #define SIZE_ETHERNET 14 #define ETHER_ADDR_LEN 6 /* Ethernet header */ struct sniff_ethernet { u_char ether_dh
2 2024-04-08
编程技术问答社区
我可以使用 pcap 库来接收 ipv6 数据包吗?
我试图将Hping3转换为Hping6. Hping3使用PCAP库接收IPv4数据包.但是我需要接收IPv6数据包. 解决方案 这是可能的. libpcap能够在电线上捕获任何东西. 其他解决方案 使用ETHERTYPE_IPV6示例: static u_int16_t ether_packet(u_char *args, const struct pcap_pkthdr *pkthdr, co nst u_char *p) { struct ether_header *eptr = (struct ether_header*)p; assert(pkthdr->caplen len); assert(pkthdr->caplen >= sizeof(struct ether_header)); return eptr->ether_type; } // This is the callback. assumes e
0 2024-04-08
编程技术问答社区
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, 0
2 2024-04-08
编程技术问答社区
Pcap函数有 "未定义的引用"
我正在尝试通过本教程: http://wwwww.tcpdump.org/pcap.html 现在,我使用以下方式安装了PCAP(代码提示和所有工作的代码提示): sudo apt-get install libpcap-dev 到目前为止,我有以下代码(文件名是example_pcap.c): #include #include int main(int argc, char *argv[]) { char *dev, errbuf[PCAP_ERRBUF_SIZE]; dev = pcap_lookupdev(errbuf); return 0; } 根据许多问题,我已经看到他们已经说过要使用以下问题来编译它: gcc -lpcap example_pcap.c -o example_pcap 但是,我仍然会收到以下错误: example_pcap.c:(.text+0x32):
0 2024-04-07
编程技术问答社区
pcap结构 pcap_pkthdr len vs caplen
我们在Linux上使用libpcap嗅探数据包 我们在每个数据包上获得的标题看起来像: struct pcap_pkthdr { struct timeval ts; /* time stamp */ bpf_u_int32 caplen; /* length of portion present */ bpf_u_int32 len; /* length this packet (off wire) */ }; 现在,我了解Caplen是我们捕获的数据的长度 Len是电线上数据包的长度.在某些情况下(例如,在打开PCAP设备时将Snaplen设置得太低时),我们可能仅捕获数据包的一部分,该长度将是" caplen",而" Len"是原始长度.因此,Caplen应等于或小于Len,但永远不会大于Len. 这是正确的理解吗?我们在某些机器上看到Caplen> len 解决方案 您的理解是
2 2024-04-07
编程技术问答社区
使用Pcap监听并超时
我想在linux上使用libpcap编写一个小应用程序. 目前,它开始嗅探并等待数据包.但这不是我真正需要的.我希望它等待n秒,然后停止聆听. 我该如何实现? 这是我的代码: void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet) { printf("got packet\n); } int main() { int ret = 0; char *dev = NULL; /* capture device name */ char errbuf[PCAP_ERRBUF_SIZE]; /* error buffer */ pcap_t *handle; /* packet capture handle */ char filter_exp[] = "udp dst port 1500"; /* filter e
0 2024-04-07
编程技术问答社区
如何使用 pcap_breakloop?
我在另一个功能中具有PCAP_LOOP函数,可以捕获数据包 直到用户停止它,即 void functionA() { signal(SIGINT, terminate_process); pcap_loop(handle, -1, callback, NULL); ... } void terminate_process(int signum) { pcap_breakloop(handle); pcap_close(handle); } 是否可以设置何时捕获数据包的持续时间?类似: if (time(NULL) - start_time > 100) pcap_breakloop(handle); ,但我不知道该放在哪里,因为到目前为止,我见过的所有示例都在信号处理程序中使用了PCAP_BRACKLOOP,这需要用户干预. PCAP_LOOP运行时如何检查时间条件? 谢谢. 问候, 雷恩 解决方案 您可
0 2024-04-07
编程技术问答社区
C-将结构写入文件(.pcap)中
我正在尝试编写一个.pcap文件,这是可以在Wireshark中使用的. 为了做到这一点,我有几个结构,其中需要将各种数据类型写入文件. (请参阅代码) 因此,我创建结构实例,填写数据,使用文件* fp = fopen(" test.pcap"," w"),然后我不确定如何将其正确写入文件.我相信我应该使用memcpy,但我不确定最好的方法.过去,我主要求助于C ++库来做到这一点.有什么建议吗? typedef struct pcap_hdr_s { uint32_t magic_number; /* magic number */ uint16_t version_major; /* major version number */ uint16_t version_minor; /* minor version number */ int32_t thiszone; /* GMT to
0 2024-04-06
编程技术问答社区
在Linux中使用pcap获取接口的IP地址
有没有一种方法可以使用libpcap在Linux中获取接口的IP地址? 我找到了这个, 获取Linux上的IP地址 ,但这不使用PCAP. 此外,在PCAP示例中,据说类似应该获取您的IP,但它为您提供网络地址. 解决方案 使用pcap_findalldevs函数: #include #include static char errbuf[PCAP_ERRBUF_SIZE]; int main() { pcap_if_t *alldevs; int status = pcap_findalldevs(&alldevs, errbuf); if(status != 0) { printf("%s\n", errbuf); return 1; } for(pcap_if_t *d=alldevs; d!=NULL; d=d->next
0 2024-04-06
编程技术问答社区
如何在OKHTTP WebSockets中找到正在发送的ping/keetalive
我使用OKHTTP库之间在服务器之间创建了一个有安全的Websocket连接.但是3分钟后,我的Websocket连接不断关闭.因此,我在下面添加了代码,以确保ping/pong: okHttpClient = new OkHttpClient.Builder() .pingInterval(20, TimeUnit.SECONDS) .build(); Request request = new Request.Builder().url(freeSwitchHost).build(); vertoWebSocket = okHttpClient.newWebSocket(request, pstnWebSocketListener); okHttpClient.dispatcher().executorService().shu
2 2023-12-10
编程技术问答社区
如何在Scapy的帮助下从文本文件中生成一个Pcap流量
我有多个文本文件,我以前通过TCPDUMP捕获了该文件,但是我没有正确设置配置,因此我没有完整的转储将其转换为PCAP文件,借助Text2PCAP.因此,我试图编写一个Python脚本以将我的文本文件转换为PCAPS. 以下是我捕获的文件的样子: tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes 1509471560.944080 MAC1 > MAC2, ethertype IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 23237, offset 0, flags [DF], proto TCP (6), length 60) IP1.port > IP2.port: Flags [S], cksum 0x6d2f (incorrect -> 0x0b4a), seq 1127096708, win 655
2 2023-12-10
编程技术问答社区
可以从Pcap文件中检索到多个WEP密钥
好吧,我有这个用Wireshark捕获的上限文件.有多个WEP密钥可以从文件中检索. 使用Wireshark或AirCrack-NG有没有办法知道该PCAP文件中有多少个WEP键? 编辑:不是WEP密码,只是可用的WEP密钥的数量. 解决方案 Wireshark的显示/过滤场名为wlan.wep.key. so:使用tshark使用显示滤波器,wc如下所需的结果(我没有尝试过): tshark -R wlan.wep.key -r | wc -l 注意:我不知道框架中是否有超过1个WEP密钥.如果是这样,则上述不会给出正确的计数. tshark -R wlan.wep.key -Tfields -eframe.number -r 应该仅显示所有帧键的帧数. tshark -R wlan.wep.key -Tfields -eframe.number -ewlan.wep.key -r
4 2023-12-10
编程技术问答社区