多IP情况下如何获取本地的第一个IP及如何调整本地的第一个IP

简介: 我分析了业务的代码,OPTIONS中的Via中的用的是采用gethostbyname获取的。这意味着该函数获取的系统的默认的第一个IP。如果操作系统有多个IP,如何设置它们的优先级呢?

昨天交付的同事联系我,相同的业务,但线上系统中,OPTIONS消息的Via地址是20网段的,但测试系统中的Via地址是181网段的。他说感到非常的奇怪。


我分析了业务的代码,OPTIONS中的Via中的用的是采用gethostbyname获取的。这意味着该函数获取的系统的默认的第一个IP。如果操作系统有多个IP,如何设置它们的优先级呢?


我先是意多IP的顺序是ifconfig中看到的顺序。但经过现场检查线上系统的IP网段顺序是相同的,先181网段后20网段。


今天灵感到来,/etc/hosts中配置了多IP及主机名字的对应关系,第一个IP是不是就在/etc/hosts中配置的呢?


于是我先写了获取IP的代码,具体如下:


#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>
int main()
{
  char hostname[100]={0};
  char localIpAddress[256]={0};
  struct hostent *h;
  gethostname(hostname,sizeof(hostname));
  printf("host name is %s \n",hostname);
  h=gethostbyname(hostname);
  struct in_addr *temp;
  temp=(struct in_addr *)h->h_addr;
  strcpy(localIpAddress,inet_ntoa(*temp));
  printf("first ip is %s\n",localIpAddress);
}


我将这段代码保存文件getfirstipbyhostname.c.g++编译


g++ getfistipbyhostname.c -o getfstip


我先运行下:


0a15d454c9954c748cc58c8ee4db9ad6.png


我查看下/etc/hsots中的顺序


81357c85f67e4324a1c6afb6cc1b1af8.png


然后我调整下/etc/hosts中的IP的顺序:


4933cbd86bf24203825b1f7d80dc1168.png

5693cd16428e4ba08b13b75c4d471d9b.png


由此可见获取本机的第一个IP地址,取决于/etc/hosts中配置的顺序。

相关文章
|
1月前
leetcode:1108. IP 地址无效化
leetcode:1108. IP 地址无效化
18 0
|
11月前
|
安全 网络安全 CDN
ip查询显示泛播是什么意思?
好奇openai的请求是如何转发的。
6758 0
|
网络协议 应用服务中间件 网络安全
限定源端口访问目标
限定源端口访问目标 1.1. 起因 在渗透测试时,客户需要对我们的测试IP进行加白,但是此次客户要求精确到固定端口或者小范围端口(不能1-65535),根据以前的经验,默认是加白IP和全端口,因为代理建立连接使用的端口是随机的,所以这次算是从头查找资料总结一下各种指定源端口的方式。 这里的端口是指与目标建立连接时使用的源端口,而不是代理监听的端口。 1.2. 注意 最
6550 1
|
JavaScript 前端开发 中间件
如何根据 IP 获取位置?
现在很多带有社交性质的应用都陆续的添加了显示地区的功能。为什么要公布属地呢? 其实主要目的还是为了净化网络空间,减少网暴的或者谣言的出现。 那么如何判断用户的地址呢? 答:IP。
532 0
|
监控 大数据 定位技术
|
存储 NoSQL MongoDB
第一个路由节点创建|学习笔记
快速学习第一个路由节点创建
105 0
第一个路由节点创建|学习笔记
|
Java 应用服务中间件
我的的第一个服务器
通过一周的使用,分享一下自己初次使用服务器部署文本项目的心得
|
安全 物联网 网络安全
什么是 IP 地址 – 定义和解释
IP 代表“互联网协议”,它是控制通过互联网或本地网络发送的数据格式的一组规则。
414 0
什么是 IP 地址 – 定义和解释
|
前端开发
29、地址列表
ok,这章讲下地址列表,我们使用有vant组件来快速完成这部分的功能。 Github:https://github.com/Ewall1106/mall 1、写在开头 关于vant组件的安装及引入的请移步:有赞Vant组件库的引入; 对于地址列表我们使用AddressList地址列表组件,大家可以去官网看看这个组件的基础用法; 先看看最终的一个效果: 地址列表 2、使用AddressList (1)首先我们在main.js中引入并注册这个组件。
1418 0