如何將人讀的140.120.*.*的IP轉換成network byte order的兩進位表示,可以使用以下的函式(定義於"arpa/inet.h">:
// String to 32-bit binary
int inet_aton(const char *strptr, struct in_addr *addrptr);
// 32-bit binary to String
char *inet_ntoa(struct in_addr inaddr);
然而,以上的函式不能處理IPv6的問題,因此有另外兩個函式可以同時處理IPv4與IPv6:
int inet_pton(int family, const char *strptr, void *addrptr);
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
其中當處理IPv4時,family值為AF_INET,IPv6時則為AF_INET6。
inet_ntoa裡,size_t len為回傳string的長度,避免Overflow。
"netinet/in.h"有定義兩個常數,讓我們可以使用他來設定長度。
#define INET_ADDRSTRLEN 16 /* for IPv4 dotted-decimal */
#define INET6_ADDRSTRLEN 46 /* for IPv6 hex string */
2007年11月6日 星期二
IP位址轉換
張貼者:
Howard
於
下午5:22
訂閱:
張貼留言 (Atom)
0 意見:
張貼留言