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身份会弹出一个莫名其妙的错误但是我忘记截图了……
就这样吧。

                              不信比来长下泪,开箱验取石榴裙。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值