本文主要是介绍libpcap抓包的千层套路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这玩意可真是太折腾人了
- 下载libpcap
- 关于测试代码
- 运行
下载libpcap
一行就行
sudo apt install libpcap-dev
输入密码,选择yes,倒一杯红tea的时间就下完了
关于测试代码
因为这回是做实验,所以先贴一下需求
winpcapt或libpcap编程过程,编写程序捕获实验一的数据包。
还原四元组(源目的IP源目的端口),和文件内容,写到一个文件里(默认文件)
如果需要也可输出到特定文件(通过配置文件或命令行参数决定,屏幕也是特定文件之一)
至于libpcap的使用,贴一个讲的巨清楚且详细的!
文章链接:https://blog.csdn.net/htttw/article/details/7521053
【太厉害了,简直是行走的说明书
【我的实验代码真的小学鸡……
#include <pcap.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h> void getPacket(u_char * arg, const struct pcap_pkthdr * pkthdr, const u_char * packet)
{ int * id = (int *)arg; FILE *fp;fp = 0;if((fp = fopen("filexample.txt","a+")) == NULL){printf("打开文件失败qvq\n");exit(-1);} printf("id: %d\n", ++(*id)); printf("Packet length: %d\n", pkthdr->len); printf("Number of bytes: %d\n", pkthdr->caplen); printf("Recieved time: %s", ctime((const time_t *)&pkthdr->ts.tv_sec)); int i;printf("源ip地址:");fputs("源ip地址:",fp); for(i=26; i<30; ++i) { printf("%d.", packet[i]);fprintf(fp,"%d.",packet[i]);}printf("\n");fputs("\n",fp); printf("目的ip地址:");fputs("目的ip地址:",fp); for(i=30; i<34; ++i) { printf("%d.", packet[i]);fprintf(fp,"%d.",packet[i]);}printf("\n源端口号:%d%d\n",packet[34],packet[35]);fprintf(fp,"\n源端口号:%d%d\n",packet[34],packet[35]);printf("目的端口号:%d%d\n",packet[36],packet[37]);fprintf(fp,"目的端口号:%d%d\n",packet[36],packet[37]);printf("\n");for(i=53; i<pkthdr->len; ++i) { printf("%02x ", packet[i]);// fprintf(fp,"%02x ",packet[i]);}printf("\n");fputs("\n",fp); fclose(fp);
} int main()
{ char errBuf[PCAP_ERRBUF_SIZE], * devStr; /* get a device */ devStr = pcap_lookupdev(errBuf); if(devStr) { printf("success: device: %s\n", devStr); } else { printf("error: %s\n", errBuf); exit(1); } /* open a device, wait until a packet arrives */ pcap_t * device = pcap_open_live(devStr, 65535, 1, 0, errBuf); if(!device) { printf("error: pcap_open_live(): %s\n", errBuf); exit(1); } /* construct a filter */ struct bpf_program filter; pcap_compile(device, &filter, "tcp", 1, 0); pcap_setfilter(device, &filter); /* wait loop forever */ int id = 0; pcap_loop(device, 5, getPacket, (u_char*)&id); pcap_close(device); return 0;
}
运行
运行这个真的是……起落落落落落
如果你按平时的方法编译,它就会给你弹出一堆未定义的引用
所以要先链接函数库,代码如下
gcc text.c -o test -lpcap
然后就可以快乐的运行了
sudo ./text
如果不用root身份会弹出一个莫名其妙的错误但是我忘记截图了……
就这样吧。
不信比来长下泪,开箱验取石榴裙。
这篇关于libpcap抓包的千层套路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!