当前位置:   article > 正文

WinPcap pcap_next_ex抓包_winpcap next

winpcap next

使用pcap_next_ex抓包

  1. // pcap_next_ex.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #define HAVE_REMOTE
  5. #include <pcap.h>
  6. #pragma comment(lib,"wpcap.lib")
  7. int _tmain(int argc, _TCHAR* argv[])
  8. {
  9. pcap_if_t *alldevs;
  10. pcap_if_t *d;
  11. int inum;
  12. int i=0;
  13. pcap_t *adhandle;
  14. int res;
  15. char errbuf[PCAP_ERRBUF_SIZE];
  16. struct tm *ltime;
  17. char timestr[16];
  18. struct pcap_pkthdr *header;
  19. const u_char *pkt_data;
  20. time_t local_tv_sec;
  21. /* 获取本机设备列表 */
  22. if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
  23. {
  24. fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
  25. exit(1);
  26. }
  27. /* 打印列表 */
  28. for(d=alldevs; d; d=d->next)
  29. {
  30. printf("%d. %s", ++i, d->name);
  31. if (d->description)
  32. printf(" (%s)\n", d->description);
  33. else
  34. printf(" (No description available)\n");
  35. }
  36. if(i==0)
  37. {
  38. printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
  39. return -1;
  40. }
  41. printf("Enter the interface number (1-%d):",i);
  42. scanf("%d", &inum);
  43. if(inum < 1 || inum > i)
  44. {
  45. printf("\nInterface number out of range.\n");
  46. /* 释放设备列表 */
  47. pcap_freealldevs(alldevs);
  48. return -1;
  49. }
  50. /* 跳转到已选中的适配器 */
  51. for(d=alldevs, i=0; i< inum-1 ; d=d->next, i++);
  52. /* 打开设备 */
  53. if ( (adhandle= pcap_open(d->name, // 设备名
  54. 65536, // 要捕捉的数据包的部分
  55. // 65535保证能捕获到不同数据链路层上的每个数据包的全部内容
  56. PCAP_OPENFLAG_PROMISCUOUS, // 混杂模式
  57. 1000, // 读取超时时间
  58. NULL, // 远程机器验证
  59. errbuf // 错误缓冲池
  60. ) ) == NULL)
  61. {
  62. fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
  63. /* 释放设列表 */
  64. pcap_freealldevs(alldevs);
  65. return -1;
  66. }
  67. printf("\nlistening on %s...\n", d->description);
  68. /* 释放设备列表 */
  69. pcap_freealldevs(alldevs);
  70. /* 获取数据包 */
  71. while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0)
  72. {
  73. if(res == 0)
  74. /* 超时时间到 */
  75. continue;
  76. /* 将时间戳转换成可识别的格式 */
  77. local_tv_sec = header->ts.tv_sec;
  78. ltime=localtime(&local_tv_sec);
  79. strftime( timestr, sizeof timestr, "%H:%M:%S", ltime);
  80. printf("%s,%.6ld len:%d\n", timestr, header->ts.tv_usec, header->len);
  81. }
  82. if(res == -1)
  83. {
  84. printf("Error reading the packets: %s\n", pcap_geterr(adhandle));
  85. return -1;
  86. }
  87. return 0;
  88. return 0;
  89. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/162515
推荐阅读
相关标签
  

闽ICP备14008679号