您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页linux网络编程---IP地址

linux网络编程---IP地址

来源:五一七教育网


一、Linux下IP地址的表示方式

1.1、通用套接字的地址类型定义如下:

struct sockaddr
{
    sa_family_t sa_family;	/* Common data: address family and length.  */
    char sa_data[14];		/* Address data.  */
};

上述结构中,定义在头文件<ifaddrs.h>中,sa_family_t实际上是 unsigned short int类型,故该结构的共占用16个字节。

1.2、以太网中的地址类型表示

struct sockaddr_in
  {
    sa_family_t sin_family;
    in_port_t sin_port;			/* Port number.  */
    struct in_addr sin_addr;		/* Internet address.  */

    /* Pad to size of `struct sockaddr'.  */
    unsigned char sin_zero[sizeof (struct sockaddr)
			   - __SOCKADDR_COMMON_SIZE
			   - sizeof (in_port_t)
			   - sizeof (struct in_addr)];
  };

/* Internet address.  */
typedef uint32_t in_addr_t;
struct in_addr
  {
    in_addr_t s_addr;
  };

1.3、结构sockaddr和结构sockaddr_in的关系

在sockaddr_in中,只使用了前面的8个字节,为了和sockaddr中保持结构大小一直,其后面的8个字节填充保留。

1.4、本地socket中使用的地址类型

typedef unsigned short __kernel_sa_family_t;
#define UNIX_PATH_MAX	108

struct sockaddr_un {
	__kernel_sa_family_t sun_family; /* AF_UNIX */
	char sun_path[UNIX_PATH_MAX];	/* pathname */
};

其中,sun_family的取值一般使用AF_UNIX或者AF_LOCAL,sun_path是一个路径名。

二、IP地址的转换

2.1 字符串IP与二进制IP地址的转换

#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);
char * inet_ntoa(struct in_addr in);

inet_aton()函数

inet_addr()函数

inet_ntoa()函数

2.2 IP转换函数之通用的版本

int inet_pton (int af, const char *src,void *dst);
const char *inet_ntop (int af, const void *src,char *dst, socklen_t size);

inet_pton()函数

inet_ntop()函数

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务