下载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身份会弹出一个莫名其妙的错误但是我忘记截图了……
就这样吧。
不信比来长下泪,开箱验取石榴裙。