wincap的使用总结
生活随笔
收集整理的這篇文章主要介紹了
wincap的使用总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在做基于wincap的網絡嗅探器,開始對wincap的嗅探過程有了了解
1.先獲取當前主機上的所有網卡設備(如果之前對設備名了如指掌,那可以直接從 第二步 開始)
if(pcap_findalldevs(&alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);exit(1);} 其中 alldevs 是個 pcap_if 結構體類型的指針,pcap_if結構體具體如下:struct pcap_if {struct pcap_if *next;char *name; /* name to hand to "pcap_open_live()" */char *description; /* textual description of interface, or NULL */struct pcap_addr *addresses;bpf_u_int32 flags; /* PCAP_IF_ interface flags */ };
2.從alldevs所指向的設備鏈表中找到想要監聽的設備名也就是結構體中 pcap_if 中的name。然后使用下面這個
if ((fp = pcap_open_live(d->name,//要抓取的網卡的設備名稱65536, //每次抓取包的長度 1, //非0即為將網卡設置為混亂模式 1000, //接收數據的等待時間 errbuf //錯誤存放 )) == NULL){fprintf(stderr,"\nError opening adapter\n");return -1;}3.獲取到了抓取實例的描述符之后,就可以使用函數pcap_next_ex來抓取數據包了
int pcap_next_ex (pcap_t *p, struct pcap_pkthdr ** pkt_header, const u_char ** pkt_data )其中pkt_header 結構體為:
struct pcap_pkthdr {struct timeval ts; //時間戳bpf_u_int32 caplen; //在線抓包轉到的長度bpf_u_int32 len; //掉線時抓包的長度 };其中pkt_data就是數據包,然后分析其中的數據就可以了
總結
以上是生活随笔為你收集整理的wincap的使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux安装程序企鹅,在Linux上安
- 下一篇: 我爱铁路之清明出游