winPcap程式設計之獲取介面卡詳細資訊(三)

2022-05-06 07:21:16 字數 1665 閱讀 7078

顯示介面卡詳細資訊

先貼上**

1 #include 2 #include 3 #include 

4 #include "

pcap.h

"5 #include 6

7 typedef struct

sockaddr_in sockad;89

/*從tcptraceroute數字ip位址轉換為字串

*/10

#define iptosbuffers 12

11char *iptos(u_long in)12

2223

/*給定的介面上列印所有可用的資訊

*/24

void ifprint(pcap_if_t *d)

2559

}60 printf("\n"

);61}62

63int

main()

6475

for(d=alldevs;d;d=d->next)

7679

return0;

80 }

主要思路就是將得到的 pcap_if_t 展開來看,先看一下pcap_if_t 的結構:

pacp_addr 同樣有五個屬性,ip位址、子網掩碼、廣播位址、目標位址。

sockaddr定義如下:

struct sockaddr ;

一般sockaddr與sockaddr_in是可以互相轉換的:

struct sockaddr_in ;

sin_family:指代協議族,可取值如下

af_inet            2             ipv4 

af_inet6          23           ipv6 

af_unspec         0             協議無關

sin_port:儲存埠號(使用網路位元組順序)

sin_addr:儲存ip位址,使用in_addr這個資料結構

sin_zero:是為了讓sockaddr與sockaddr_in兩個資料結構保持大小相同而保留的空位元組。

typedef struct in_addr s_un_b;

struct s_un_w;

unsigned long s_addr;

} s_un;

} in_addr;

闡述下in_addr的含義,很顯然它是乙個儲存ip位址的共用體有三種表達方式:

第一種用四個位元組來表示ip位址的四個數字;

第二種用兩個雙位元組來表示ip位址;

第三種用乙個長整型來表示ip位址。

這裡先吧sockaddr強制轉換成aockaddr_in,然後取其中的sin_addr中的s_addr表示方式,然後將這個 unsigned long轉換成可讀的ip位址。

u_char是無符號字元型別,最大值是255。

輸出結果:

介面卡模式 預設介面卡,類介面卡,物件介面卡

模式思想 改變乙個類的對外介面 增加或減少 以滿足不同外部呼叫者的需求 角色成員 目標介面 target 客戶所期待的介面。目標可以是具體的或抽象的類,也可以是介面。需要適配的類 adaptee 需要適配的類或適配者類。介面卡 adapter 通過包裝乙個需要適配的物件,把原介面轉換成目標介面。適配...

介面卡模式(類介面卡 物件介面卡)

做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...

STL介面卡 函式介面卡

有時候需要對內建函式物件返回值進行進一步的簡單計算,或者填上多餘的引數,不能直接代入演算法。函式介面卡實現了這一功能,函式介面卡是將一種函式物件轉化為另一種符合要求的函式物件。函式介面卡可以分為4個大類 繫結介面卡 組合介面卡 指標函式介面卡和成員函式介面卡。需求 在遍歷容器的時候,將容器中的值全部...