Libpcap tutorial-02

  <中心>

捕捉我们的第一个包

<人力资源noshade=" noshade "/>

现在我们知道数据包捕获的本质   确认,我们实际上有一个接口拉东西,怎么做   我们抓住一个包!
“就给我该死的例子   让我砍……”,你哭.....
很好给你. .下载   从这里. .testpcap1。c或剪切和粘贴   下面。

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *,文件:,,,,testpcap1.c
  *
  *,Simple  single  packet  capture 程序
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */# include  & lt; stdio.h>
  # include  & lt; stdlib.h>
  # include  & lt; pcap.h>,/*,加入报错请尝试用,pcap/pcap.h  */# include  & lt; errno.h>
  # include  & lt; sys/socket.h>
  # include  & lt; netinet/in.h>
  # include  & lt; arpa/inet.h>
  # include  & lt; netinet/if_ether.h>,/*,包含;net/ethernet.h , */命令行参数个数,int 主要(int  char  * * argv)
  {
  ,,,int 我;
  ,,,char  * dev,,
  ,,,char  errbuf [PCAP_ERRBUF_SIZE];
  ,,,pcap_t *,备注说明;
  ,,,const  u_char  *包;
  ,,,struct  pcap_pkthdr  hdr;,,,,,/*, pcap.h  */,,,struct  ether_header  * eptr;,/*;net/ethernet.h , */,,,u_char  * ptr;,/*,打印输出硬件头信息,*/,,,/*,抓取网卡,*/,,,dev =, pcap_lookupdev (errbuf);
  
  ,,,如果(dev ==, NULL)
  ,,,{
  ,,,,,,,printf (" % s \ n " errbuf);
  ,,,,,,,退出(1);
  ,,,}
  
  ,,,,
  ,,,printf (" DEV: % s \ n ", DEV);
  
  ,,,/*,
  ,,,,,,打开网卡,准备监听
  ,,,,,,pcap_t  * pcap_open_live (char  *设备,int  snaplen, int  promisc, int  to_ms,
  ,,,,,,char  * ebuf)
  
  ,,,,,,snaplen 作用;抓取的最大字节
  ,,,,,,promisc 作用;设置网卡为混杂模式
  ,,,,,,to_ms ,,今天早上,等待时间,单位,女士
  ,,,,,,errbuf ,安康;保存错误信息
  
  ,,,,,,Note  if 你change “prmisc”, param 用anything  other  than 零,你会
  ,,,,,,get  all  packets  your  device 看到,,whether 活动对象,断开连接;intendeed  for 你或
  ,,,,,,不! !,Be  sure 你知道,rules  of 从而network 你断开连接;running 
  ,,,,,,before 你set  your  card  promiscuous 拷贝模式! !,,,,
  ,,,,,,注意:如果你将网卡的模式从混杂模式改为任何一种其他模式,你将会监听到你的网卡能看到的所有数据包,无论是否是你想要的,再更新你网卡模式时,一定要确认你了解你正在使用网卡的知识
  ,,,*/,,,,
  ,,,descr =, pcap_open_live (dev BUFSIZ 0 1 errbuf);
  
  ,,,如果(descr ==, NULL)
  ,,,{
  ,,,,,,,printf (" pcap_open_live ():, % s \ n”, errbuf);
  ,,,,,,,退出(1);
  ,,,}
  
  
  ,,/*
  ,,,,,,,,,,,,,,,,,
  ,,,,,,u_char  * pcap_next (pcap_t  * p, struct  pcap_pkthdr  * h),
  
  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
  ,,,,,,从备注说明抓取一个数据包
  ,,,,
  ,,*/,,,packet =, pcap_next(备注说明,和hdr);
  
  ,,,如果(packet ==, NULL)
  ,,,{
  ,,,,,,,printf("并't  grab 包\ n”);
  ,,,,,,,退出(1);
  ,,,}
  
  ,,,/*,,
  ,,,,,,,pcap_pkthdr 结构体详解
  ,,,,,,,struct  pcap_pkthdr  {
  ,,,,,,,struct  timeval  ts;,,, t是一个结构struct  timeval,它有两个部分,第一部分是1900年开始以来的秒数,第二部分是当前秒之后的毫秒数
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

Libpcap tutorial-02