libpcap抓包的千层套路

阅读: 评论:0

libpcap抓包的千层套路

libpcap抓包的千层套路

这玩意可真是太折腾人了

    • 下载libpcap
    • 关于测试代码
    • 运行

下载libpcap

一行就行

sudo apt install libpcap-dev

输入密码,选择yes,倒一杯红tea的时间就下完了

关于测试代码

因为这回是做实验,所以先贴一下需求

winpcapt或libpcap编程过程,编写程序捕获实验一的数据包。
还原四元组(源目的IP源目的端口),和文件内容,写到一个文件里(默认文件)
如果需要也可输出到特定文件(通过配置文件或命令行参数决定,屏幕也是特定文件之一)

至于libpcap的使用,贴一个讲的巨清楚且详细的!
文章链接:
【太厉害了,简直是行走的说明书
【我的实验代码真的小学鸡……

#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(&#","a+")) == NULL){printf("打开文件失败qvqn");exit(-1);}  printf("id: %dn", ++(*id));  printf("Packet length: %dn", pkthdr->len);  printf("Number of bytes: %dn", 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%dn",packet[34],packet[35]);fprintf(fp,"n源端口号:%d%dn",packet[34],packet[35]);printf("目的端口号:%d%dn",packet[36],packet[37]);fprintf(fp,"目的端口号:%d%dn",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: %sn", devStr);  }  else  {  printf("error: %sn", 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(): %sn", 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身份会弹出一个莫名其妙的错误但是我忘记截图了……
就这样吧。

                              不信比来长下泪,开箱验取石榴裙。

本文发布于:2024-01-30 03:26:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170655638818900.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:套路   千层   libpcap
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23