抓主機資料的函數
gethostbyname函數原型:
這個函數的回傳值若為NULL的時候,代表錯誤發生;其他回傳值代表有找到主機的資料。
如果發生錯誤的時候可以利用查詢h_errno的值來取得錯誤資訊。
*註: 還有另一個兄弟函數gethostbyname2(arg1,arg2),arg2是可以要求分辨IPv4或是IPv6的網路網路位址。
在紅書上所用的函數
gethostbyaddr函數原型:
辨析:
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) ----汲取主機名稱----> 網路主機名稱
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) ----汲取主機名稱----> 網路主機名稱
留言