分享好友 最新动态首页 最新动态分类 切换频道
linux网络编程---IP地址
2024-12-26 07:56

目录

linux网络编程---IP地址

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

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

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

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

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

二、IP地址的转换

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

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


在socket编程中,地址结构通常都是以sockaddr_开头的,不同的协议族有不同的地址后缀定义方式

 

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

从上面可以看出,在以太网编程中,使用struct sockaddr结构并不是很方便,没法直观的标示IP地址和端口等相关的信息,为此在以太网编程中,使用struct sockaddr_in来描述网络地址信息,其结构如下

 

上述结构中,struct in_addr是使用一个uint32_t 网络字节序描述的IP地址信息,我们在转换成点分式的IP信息时,就是使用的该结构体中in_addr_t进行转换的。

上面两节描述了通用的socket地址和以太网中使用的地址,那么,这两种结构有啥关系呢,其实,通过上面的结构体介绍,已经可以看到一个大概,sockaddr和sockaddr_in是一个同样大小的结构,其对应关系如下图

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

在使用bind等相关函数时,通常都是使用的地址sockaddr,这样,我们在实际以太网编程使用的过程中,都是利用结构sockaddr_in进行地址信息的设置,然后使用强转为sockaddr类型

在进程间通信中,也可以使用socket进行通信,与网络编程类似,其也有一个地址描述信息结构体,其结构体说明如下

 

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

上一章中,介绍了在网络编程中常用的几个与ip地址相关的数据结构,看完上面的一章,我们可能有这样的疑问,上面提到的IP地址都是用一个uint32_t 表示的,但是我们在实际中,见到的一般都是192.168.1.xx这种点分式的表示方法,那么,这两者之间如何转换?linux提供了一系列的函数,来完成这个工作。

Linux系统中提供了一组函数用于网络地址的字符串形式和二进制形式之间的转换,其形式为inet_xxx(),函数具体如下

 

inet_aton()函数

该函数将cp中的十进制字符串类型的IP地址,转换为二进制的IP地址,转换成功后的值,保存在指向结构体 struct in_addr 中,由上一章可以知道,该结构中为 struct sockaddr_in中的一个变量。当转换成功时,返回一个非0值,当转换失败或者传入的一个非法地址时,返回值为0。

inet_addr()函数

该函数与inet_aton()函数类似,也是将字符串形式的字符串转换为二进制的IP地址,转换成功返回IP地址,这个IP地址时网络字节序的表达,如果转换失败或者参数非法,返回-1,因为-1的存储形式为(111111111111111),而IP地址255.255.255.255也是这个值,故不能使用这个函数对这个地址进行转换。

inet_ntoa()函数

该函数是将一个struct in_addr表示的一个IP地址转换为点分十进制的字符串IP地址,返回值是转换后的字符串指针,这个指针是该函数返回的,该函数会用一个静态区域保存该返回结果,有可能结果会被其他线程调用覆盖这个结果,故该函数并不是线程安全的,使用时需要注意。

在2.1节中,描述了常用的几个IP地址各种形式之间的转换函数,通过描述,可以知道,这几个函数或多或少存在缺陷,如只支持IPV4,或者不是线程安全的。下面介绍一对安全的与协议无关的地址转换函数,这两个函数都是可以重入支持多线程的,且这些函数支持IPv4和IPv6。

 

inet_pton()函数

该函数是将字符串类型的IP地址转换为二进制类型,第一个参数af表示网络类型的协议族,在IPv4下的值为AF_INET,第二个参数src表示需要转换的字符串,第三个参数表示转换后的结构,在IPv4中,dst指向的是一个struct in_addr的结构体指针。该函数的返回值为-1的时候,通常是第一个参数af指定的协议族不支持造成的。当函数的返回值为0时,表示src指向的值不是合法的IP地址,当返回值为正值时,表示转换成功。

inet_ntop()函数

最新文章
百度竞价推广代运营公司
百度竞价推广代运营公司,专注于为企业提供全方位的竞价推广服务。通过精准的关键词策略、创意广告设计和持续优化,帮助企业提升在百度搜索结果中的曝光率,吸引更多潜在客户。代运营公司还提供专业的数据分析,根据数据调整推广策略,确保
最新跨境电商复习课程
Wish一、单选题(2 分/题,共40 分)1.Wish 平台有大约(D )的订单来自于移动端。A. 80%B. 85%C.90%D. 95%2.Wish 的注册用户大部分年龄层在(B )。A. 20sB. 30sC. 40sD. 50s3.Wish 是一家来自(B )的创业企业。A. 印度B. 美国C. 德国D.
【R7s(移动4G)应用宝下载】OPPO R7s 移动4G应用宝8.8.6免费下载
(Android)是腾讯应用中心倾力打造的手机应用商店,致力于为用户丰富、优质、个性化的安卓软件资源和一站式的下载管理体验,全方位覆盖用户的下载、管理、收藏、分享、等多样化需求应用宝2024更新内容1、修复了一些已知的bug应用宝6.7更新
声波清理大师sonic官方版app2024免费下载安装最新版
Sonic声波助手,一般又称声波清理大师sonic。Sonic声波助手是以坤功能十分强大专业声波助手软件,能够有效的释放低频音频,能够清理手机喇叭中的灰尘污渍,当手机进水的时候还能有效排出手机进的水,非常的方便,还能播放自然声音频,聆听
第一批AI原住民开始变现:9岁小学生,用大模型写书赚2万
撰文 | 江小玉 编辑 | 龚 正 当人们正在观望,AI什么时候抢走自己的饭碗时,北京一名9岁的小学生在AI的帮助下写了一本小说,并赚到了2万元的版税。 这件看似不可思议的事,他是如何做到的?此外,他还
Nginx与Web安全:遵循OWASP最佳实践
在当今数字化时代,网络安全已成为企业不可忽视的重要环节。Web应用程序面临着各种威胁,包括SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。Nginx作为高性能的HTTP和反向代理服务器,
多地点企业如何做SEO优化,提升搜索排名?
在当今这个数字化时代,多地点企业的线上竞争愈发激烈。我深知,在这个信息爆炸的互联网世界里,如何让自己的企业在众多竞争者中脱颖而出,成为用户搜索时的首选,是每一位企业主都梦寐以求的。基于我多年在SEO优化领域的实战经验,我发现
迈信林下跌5.38%,报33.05元/股
12月13日,迈信林盘中下跌5.38%,截至13:00,报33.05元/股,成交7604.87万元,换手率1.54%,总市值48.06亿元。资料显示,江苏迈信林航空科技股份有限公司位于苏州市吴中区太湖街道溪虹路1009号,公司是一家专业制造和销售飞机核心零部件的
盲区监测系统选购 or 避坑指南
如果您想选购盲区监测系统那可得好好琢磨琢磨。首先传感器选 77GHz 毫米波雷达它探测性能稳定、作用距离长、环境适用性好体积小重量轻穿透雾烟灰尘能力强还符合工信部规定频段。多发多收天线雷达方案更好探测精确度高误报漏报率低。功能方
相关文章
推荐文章
发表评论
0评