#include <sys/socket.h> |
#include <netinet/in.h> |
#include <arpa/inet.h> |
int inet_aton(const char *cp, struct in_addr *inp); |
in_addr_t inet_addr(const char *cp); |
in_addr_t inet_network(const char *cp); |
char *inet_ntoa(struct in_addr in); |
struct in_addr inet_makeaddr(int net, int host); |
in_addr_t inet_lnaof(struct in_addr in); |
in_addr_t inet_netof(struct in_addr in); |
1、inet_aton() |
inet_aton() 将参数 cp 指向的字符串形式的 IP 地址转换为二进制的网络字节顺序的 IP 地址,转换后的结果存于参数 inp 所指向的空间中。执行成功返回非 0 值,参数无效返回 0. |
2、inet_addr() |
与 inet_aton() 类似,执行成功时将转换后的结果返回,参数无效返回 INADDR_NONE (该值一般为 -1)。 |
注意,此函数已经过时,推荐使用 inet_aton()。因为对于有效地址 "255.255.255.255" 它也返回 -1 (因为 -1 的补码形式为 0xFFFFFFFF ),使得用户可能将 255.255.255.255 也当成是无效的非法地址,而使用 inet_aton() 则不存在这个问题。 |
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
char buffer[32];
int ret = 0;
int host = 0;
int network = 0;
unsigned int address = 0;
struct in_addr in;
in.s_addr = 0;
/*输入一个以 "." 分隔的字符串形式的IP地址*/
printf("please input your ip address:");
fgets(buffer, 31, stdin);
buffer[31] = '\0';
/*测试使用 inet_aton() 函数*/
if ((ret = inet_aton(buffer, &in)) == 0) {
printf("inet_aton: \tinvailid address\n");
} else {
printf("inet_aton: \t0x%x\n", in.s_addr);
}
/*测试使用 inet_addr() 函数*/
if ((address = inet_addr(buffer)) == INADDR_NONE) {
printf("inet_addr: \tinvalid address \n");
} else {
printf("inet_addr:\t0x%lx\n", address);
}
/*测试使用 inet_netwrok()函数*/
if ((address = inet_network(buffer)) == -1) {
printf("inet_network: \tinvalid address\n");
} else {
printf("inet_network:\t0x%lx\n", address);
}
/*测试使用 inet_ntoa() 函数*/
if (inet_ntoa(in) == NULL) {
printf("inet_ntoa: \tinvalid address\n");
} else {
printf("inet_ntoa: \t%s\n", inet_ntoa(in));
}
/*测试使用 inet_lnaof() 与 inet_netof() 函数*/
host = inet_lnaof(in);
network = inet_netof(in);
printf("inet_lnaof:\t0x%x\n", host);
printf("inet_netof:\t0x%x\n", network);
in = inet_makeaddr(network, host);
printf("inet_makeaddr:0x%x\n", in.s_addr);
return 0;
}
beyes@linux-beyes:~/C/network> ./test_address.exe
please input your ip address:192.168.2.100
inet_aton: 0x6402a8c0
inet_addr: 0x6402a8c0
inet_network: 0xc0a80264
inet_ntoa: 192.168.2.100
inet_lnaof: 0x64
inet_netof: 0xc0a802
inet_makeaddr:0x6402a8c0
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
int main (int argc, char **argv)
{
struct in_addr net_addr, ret;
char buf[128];
inet_pton (AF_INET, "192.168.2.102", &ret);
printf ("%x\n", ret.s_addr);
inet_ntop (AF_INET, &ret, buf, 128);
printf ("buf=%s\n", buf);
return (0);
}
./inet_pton
6602a8c0
buf=192.168.2.102
/* Internet address. */
typedef uint32_t in_addr_t;
struct in_addr
{
in_addr_t s_addr;
};
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |