前言

从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和端口相关推荐

  1. php获取ip与端口,PHP获取IP与连接数,并获取IP所在地址

    php-cli下执行 windows下的运维工具,改成linux也很方便 用PHP获取IP与连接数,并获取IP所在地址,主要针对80端口,其他端口也能看到 开启反解ip可判断是否是蜘蛛. //获取连接 ...

  2. shodan API 获取IP开放端口

    # -*- coding: utf-8 -*-""" @author:随时静听 @file: shodanForIp.py @time: 2019/01/28 @emai ...

  3. Java获取IP和端口(Linux)

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes( ...

  4. 【Qt Quick】QNetworkDatagram获取Ip及端口

    系统:win10 通信:UDP 简介 在写聊天软件练习时,作为服务器端需要优先知道客户端的Ip及地址,客户端发送数据过来时用QNetworkDatagram接收 代码 void UDPServer:: ...

  5. Java获取客户端ip和端口

    "青枫江上秋帆远,白帝城边古木疏" 如果你的方法参数里面直接有request,像下面这样: @RequestMapping("/test.json")@Resp ...

  6. WCF获取客户端IP和端口

    //提供方法执行的上下文环境OperationContext context = OperationContext.Current;//获取传进的消息属性MessageProperties prope ...

  7. 通过ribbon 根据服务名获取所有服务实例的IP和端口列表

    代码使用SpringCloud版本E3 业务场景: 今天遇到一个业务场景,要求根据服务名获取当前微服务集群中所有的对应服务实例的IP和端口,通过分析源码推算出了写法. 原理简述: 如果代码中引入了sp ...

  8. 获取本地IP和端口号的指令

    ipconfig就可以获取ip 获取端口号的指令: 开始--运行--cmd--输入netstat an(中间有一空格) 转载于:https://www.cnblogs.com/BoYu045535/p ...

  9. 根据域名获取ip地址、端口、服务器类型和标题

    这个是我在一家网络安全公司面试时的操作题,回来后经过多次修改后才得到一个比较完整的程序. 整个模块可以分成两个大部分.一个是数据库的操作,一个是信息的获取(类似爬虫?) 信息的获取分为四个小操作,ip ...

最新文章

  1. chatscript_如何使用ChatScript构建您的第一个聊天机器人
  2. [Windows][C#][.NET][WPF]基于ArcFace2.0+红外双目摄像头的活体检测
  3. 淮阳一高2021高考成绩查询,周口教育网2021年淮阳中招成绩查询系统
  4. 从零开始搭建spring-cloud(1) ----eureka
  5. 写在SDOI2016Round1前的To Do List
  6. AsyncEx - async/await 的辅助库
  7. Acwing 307. 连通图
  8. n.html id=198,YPE htmlhtml lang=enhead data-n-head-ssrtitle data-n-=true小程序获取不到unionid 微信开放社区...
  9. 企业高可用切换的说明
  10. php 统计目录大小,PHP 统计目录大小
  11. offset;scroll;client
  12. 陶哲轩实分析命题6.4.12
  13. julia go python_过去的Python的四个挑战者:Swift、Go、Julia、R
  14. python不同颜色的代码_python日志通过不同的等级打印不同的颜色(示例代码)
  15. 高性能内存分配器 jemalloc 基本原理
  16. DTAS棣拓三维公差分析软件容差分析软件蒙特卡洛法:DTAS Talk尺寸联盟参与公益课
  17. 强智教务系统验证码识别 Tensorflow CNN
  18. python分析谷歌浏览器的历史记录
  19. PoseCNN(A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes)复现记录
  20. Visustin(自动生成流程图)使用说明

热门文章

  1. python 按钮控件_python实现360皮肤按钮控件实例
  2. 颜值与质量俱佳的4K miniDP转DP线
  3. 遍历想要属性里面的所有方法
  4. vue集成px2rem
  5. Android-短信弹窗提示
  6. sql中limit的用法
  7. 白云学院插本c语言试卷,【考试大纲】2020年广东白云学院(美术设计)专插本考题考试大纲(分享)...
  8. Linux文件系统与日志分析
  9. winxpsp2 mdac 2.8 安装问题[摘]
  10. mysql备份还原参数详解