日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ winpcap开发(2)

發布時間:2025/3/15 c/c++ 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ winpcap开发(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獲取有關可用適配器的基本信息(即設備名稱和描述)。實際上WinPcap還提供其他高級信息。特別地,pcap_findalldevs_ex()返回的每個pcap_if結構還包含pcap_addr結構的列表,其中包含:

  • 該接口的地址列表。
  • 網絡掩碼列表(每個都對應于地址列表中的一個條目)。
  • 廣播地址的列表(每個地址對應于地址列表中的條目)。
  • 目的地址列表(每個目的地址對應于地址列表中的條目)。

此外,pcap_findalldevs_ex()還可以返回遠程適配器和位于給定本地文件夾中的pcap文件列表。

以下示例提供了一個打印pcap_if結構的完整內容的ifprint()函數。該程序由pcap_findalldevs_ex()返回的每個條目調用。

#include <stdio.h>#include "pcap.h"#ifndef WIN32#include <sys/socket.h>#include <netinet/in.h> #else#include <winsock.h> #endif// 函數原型 void ifprint(pcap_if_t *d); char *iptos(u_long in); char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);int main() {pcap_if_t *alldevs;pcap_if_t *d;char errbuf[PCAP_ERRBUF_SIZE+1];char source[PCAP_ERRBUF_SIZE+1];printf("Enter the device you want to list:\n""rpcap:// ==> lists interfaces in the local machine\n""rpcap://hostname:port ==> lists interfaces in a remote machine\n"" (rpcapd daemon must be up and running\n"" and it must accept 'null' authentication)\n""file://foldername ==> lists all pcap files in the give folder\n\n""Enter your choice: ");fgets(source, PCAP_ERRBUF_SIZE, stdin);source[PCAP_ERRBUF_SIZE] = '\0';/* 檢索接口列表 */if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1){fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);exit(1);}/* 掃描列表打印每個條目 */for(d=alldevs;d;d=d->next){ifprint(d);}pcap_freealldevs(alldevs);return 1; }/* Print all the available information on the given interface */ void ifprint(pcap_if_t *d) {pcap_addr_t *a;char ip6str[128];/* Name */printf("%s\n",d->name);/* Description */if (d->description)printf("\tDescription: %s\n",d->description);/* Loopback Address*/printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");/* IP addresses */for(a=d->addresses;a;a=a->next) {printf("\tAddress Family: #%d\n",a->addr->sa_family);switch(a->addr->sa_family){case AF_INET:printf("\tAddress Family Name: AF_INET\n");if (a->addr)printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));if (a->netmask)printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));if (a->broadaddr)printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));if (a->dstaddr)printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));break;case AF_INET6:printf("\tAddress Family Name: AF_INET6\n");if (a->addr)printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str)));break;default:printf("\tAddress Family Name: Unknown\n");break;}}printf("\n"); }/* 從tcptraceroute中,將數字IP地址轉換為字符串 */ #define IPTOSBUFFERS 12 char *iptos(u_long in) {static char output[IPTOSBUFFERS][3*4+3+1];static short which;u_char *p;p = (u_char *)&in;which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);_snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);return output[which]; }char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen) {socklen_t sockaddrlen;#ifdef WIN32sockaddrlen = sizeof(struct sockaddr_in6);#elsesockaddrlen = sizeof(struct sockaddr_storage);#endifif(getnameinfo(sockaddr, sockaddrlen, address, addrlen, NULL, 0, NI_NUMERICHOST) != 0) address = NULL;return address; }

總結

以上是生活随笔為你收集整理的c++ winpcap开发(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。