从sockaddr结构获取IP和端口
前言
从sockaddr结构中提取IP, 先将结构sockaddr转为sockaddr_in结构,然后用在利用相关API将其中的IP地址从网络格式转化我们熟悉点分十进制的字符串。
一、sockaddr和sockaddr_in结构
程序员不应操作sockaddr结构,sockaddr是给操作系统用的
程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。
struct sockaddr { unsigned short sa_family; // 2 bytes address family, AF_xxx unsiged shortchar sa_data[14]; // 14 bytes of protocol address
};
struct sockaddr_in { short sin_family; // 2 bytes e.g. AF_INET, AF_INET6 unsigned short sin_port; // 2 bytes e.g. htons(3490) struct in_addr sin_addr; // 4 bytes see struct in_addr, below char sin_zero[8]; // 8 bytes zero this if you want to
}; struct in_addr { unsigned long s_addr; // 4 bytes load with inet_pton()
}
它们结构之间表示如下图。
二、从结构sockaddr获取IP和端口。
使用结构inet_ntop获取IP地址,而不是用inet_ntoa。可能是因为64位机子引起的问题。
详细的原因参考:https://blog.csdn.net/zmxiangde_88/article/details/8157256
struct sockaddr from;/*...working ...
*/struct sockaddr_in *sock = ( struct sockaddr_in*)&from;int port = ntohs(sock->sin_port);#ifdef __MINGW32__ //windows上打印方式printf("ip:port %s : %d",inet_ntoa(sock->sin_addr),port);#else //linux上打印方式struct in_addr in = sock->sin_addr;char str[INET_ADDRSTRLEN]; //INET_ADDRSTRLEN这个宏系统默认定义 16//成功的话此时IP地址保存在str字符串中。inet_ntop(AF_INET,&in, str, sizeof(str));printf("ip:port %s : %d",str,port);#endif
inet_ntop接口文档
/* Convert a Internet address in binary network format for interfacetype AF in buffer starting at CP to presentation form and placeresult in buffer of length LEN astarting at BUF. */
extern const char *inet_ntop (int __af, const void *__restrict __cp,char *__restrict __buf, socklen_t __len)将其转化的结果放置到buf中。即最终转化的IP值存放在buf中。
三、参考
sockaddr和sockaddr_in的区别: https://blog.csdn.net/tao546377318/article/details/72780685
inet_ntoa在64位机器上出错: https://blog.csdn.net/zmxiangde_88/article/details/8157256
从sockaddr结构获取IP和端口相关推荐
- php获取ip与端口,PHP获取IP与连接数,并获取IP所在地址
php-cli下执行 windows下的运维工具,改成linux也很方便 用PHP获取IP与连接数,并获取IP所在地址,主要针对80端口,其他端口也能看到 开启反解ip可判断是否是蜘蛛. //获取连接 ...
- shodan API 获取IP开放端口
# -*- coding: utf-8 -*-""" @author:随时静听 @file: shodanForIp.py @time: 2019/01/28 @emai ...
- Java获取IP和端口(Linux)
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes( ...
- 【Qt Quick】QNetworkDatagram获取Ip及端口
系统:win10 通信:UDP 简介 在写聊天软件练习时,作为服务器端需要优先知道客户端的Ip及地址,客户端发送数据过来时用QNetworkDatagram接收 代码 void UDPServer:: ...
- Java获取客户端ip和端口
"青枫江上秋帆远,白帝城边古木疏" 如果你的方法参数里面直接有request,像下面这样: @RequestMapping("/test.json")@Resp ...
- WCF获取客户端IP和端口
//提供方法执行的上下文环境OperationContext context = OperationContext.Current;//获取传进的消息属性MessageProperties prope ...
- 通过ribbon 根据服务名获取所有服务实例的IP和端口列表
代码使用SpringCloud版本E3 业务场景: 今天遇到一个业务场景,要求根据服务名获取当前微服务集群中所有的对应服务实例的IP和端口,通过分析源码推算出了写法. 原理简述: 如果代码中引入了sp ...
- 获取本地IP和端口号的指令
ipconfig就可以获取ip 获取端口号的指令: 开始--运行--cmd--输入netstat an(中间有一空格) 转载于:https://www.cnblogs.com/BoYu045535/p ...
- 根据域名获取ip地址、端口、服务器类型和标题
这个是我在一家网络安全公司面试时的操作题,回来后经过多次修改后才得到一个比较完整的程序. 整个模块可以分成两个大部分.一个是数据库的操作,一个是信息的获取(类似爬虫?) 信息的获取分为四个小操作,ip ...
最新文章
- 招聘 | ​浙江农林大学孙学鹏团队招聘事业编制科研人员
- android如何设置软件的版本,假的设置软件-假的设置(型号模拟)下载v2.5 安卓版-西西软件下载...
- Redis缓存高可用集群哨兵模式详解
- JMM如何解决顺序一致性问题-重排序问题
- ROS + OpenCV
- extjs 实现 NumberField 即时计算
- require,include,require_once和include_once之间的区别?
- jupyter notebook + 服务器中docker 使用配置
- 黑苹果 OC引导 big sur 主题分享
- 算法探究:线性时间选择问题
- 超星尔雅学习通情商与智慧人生 答案 满分版
- 互联网上的UFO教派
- 提高INSERT速度
- 第1章 数学基础和机器学习问题(范数+矩阵迹+矩阵求导+机器学习框架)
- 智慧灯杆系统设计架构简介
- ios 模拟器沙盒_ios 模拟器沙盒的位置 | 学步园
- TestCenter测试管理工具功能详解八(M)
- 基于主流Arm服务器的低成本云游戏、云手机产品方案【Rockchip、MediaTek等】
- 爱普生连续供墨系统故障排除方法
- 有关于3GPP SUL的一些学习