嗅探器wincap代码
时间: 2024-05-03 07:17:12 浏览: 175
以下是使用WinPcap进行嗅探的示例代码:
```c++
#include <pcap.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
int main()
{
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *fp;
pcap_if_t *alldevs, *d;
int inum, i=0;
struct pcap_pkthdr header;
const u_char *pkt_data;
// 获取本机所有网络接口
if(pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);
exit(1);
}
// 打印所有网络接口信息
for(d=alldevs; d; d=d->next)
{
printf("%d. %s", ++i, d->name);
if (d->description)
printf(" (%s)\n", d->description);
else
printf(" (No description available)\n");
}
// 让用户选择一个网络接口
printf("Enter the interface number (1-%d):",i);
scanf("%d", &inum);
if(inum < 1 || inum > i)
{
printf("\nInterface number out of range.\n");
pcap_freealldevs(alldevs);
return -1;
}
// 跳转到用户选择的网络接口
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
// 打开网络接口
if ( (fp= pcap_open(d->name, 100, PCAP_OPENFLAG_PROMISCUOUS, 1000, NULL, errbuf) ) == NULL)
{
fprintf(stderr,"\nError opening adapter\n");
pcap_freealldevs(alldevs);
return -1;
}
printf("\nListening on %s...\n", d->description);
// 开始嗅探
pcap_loop(fp, 0, packet_handler, NULL);
pcap_close(fp);
pcap_freealldevs(alldevs);
return 0;
}
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)
{
printf("Packet size: %d bytes\n", header->len);
}
```
该示例代码使用了`pcap`库进行嗅探,并且在`packet_handler`函数中打印出了每个抓到的数据包的大小。在运行代码时,程序会列出所有可用的网络接口以供用户选择,并在用户选择后开始嗅探指定的网络接口。
阅读全文