抓主機資料的函數

gethostbyname函數原型:

struct hostent*
gethostbyname(
 const char* name
);

這個函數的回傳值若為NULL的時候,代表錯誤發生;其他回傳值代表有找到主機的資料。
如果發生錯誤的時候可以利用查詢h_errno的值來取得錯誤資訊。

*註: 還有另一個兄弟函數gethostbyname2(arg1,arg2),arg2是可以要求分辨IPv4或是IPv6的網路網路位址。

在紅書上所用的函數
gethostbyaddr函數原型:

struct hostent *
gethostbyaddr (
 const char *addr,
 size_t length,
 int format
);

辨析:
 gethostbyname的參數是表示網路名稱的字串,字串可以是192.168.1.1這種形式、或是localhost這種網路名稱,它會透過NameServer去查詢我們所指定的網路主機名稱,由它所回傳hostent結構裡面的IP資料都是網路上的byte-ordering,並不見得是本機電腦上的byte-ording。
 gethostbyaddr三個參數分別意義是,網路IP、網路IP的長度、網路IP的格式。第一個參數所需要的網路IP,並不是我們人在看的192.168.1.1這種形式,而是存的位元資料,這種位元資料需要以網路的byte-ording表示,不然一定會查詢不到所需的主機資料;第二個參數我就此略過了,這個大小相信大家自己會給;第三個參數則是需要指定輸入的IP為何種IP格式,是IPv4、或是IPv6。
 所以查詢主機資料的這兩個函數,可以拿來作為查詢網路主機IP位置,或是反查某個IP位置的網路名稱,至於其他用法,就有待思考囉!


網路主機名稱(string) ----gethostbyname()----> 網路主機資料(hostent) ----汲取IP----> 主機IP

主機IP(byte data) ----gethostbyaddr()----> 網路主機資料(hostent) ----汲取主機名稱----> 網路主機名稱

留言