在網路中的多穴主機可能同時擁有多個IP位址,特別是在使用了動態主機地址分配時也很難知道主機上的IP位址是什麼。下面利用一段C程式來列舉出主機上的所有IP位址。下面是具體代碼:
void print_all_ip(void)
{
char szHostName[128];
const char* pszAddr;
struct hostent * pHost;
int i,j;
if( gethostname(szHostName, 128) == 0 )
{
pHost = gethostbyname(szHostName);
for( i = 0; pHost!= NULL && pHost->h_addr_list[i]!= NULL; i++ )
{/*對每一個IP位址進行處理*/
pszAddr=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);
printf("%s ",pszAddr);/*列印*/
}
}
}
介紹Socket編程的文章已經很多,所以接下來只對相關內容進行簡單的講解, 函式gethostname將回返回給定主機名所對應的信息,在WinSock中struct hostent的定義如下:
struct hostent
{
char FAR * h_name;
char FAR * FAR * h_aliases;
short h_addrtype;
short h_length;
char FAR * FAR * h_addr_list;
};
對於結構中的內容和其中對取得多個IP位址我們有用的是最後一個分量h_add_list,它是一個列表,通過它我們可以得到所有的IP位址。 下面舉出一些具體的套用實例,(1)在一個主機同時擁有IP位址,並且同時屬於兩個網段時,可以利用不同的IP位址產生網路半關聯,並向不同的網段產生連線請求。(2)在LAN山的主機利用撥接,可以得到由ISP動態分配的IP位址,這一IP位址可以和Internet上的其它主機連線。此外上面的代碼可以直接在UNIX下使用而不局限於WinSock。