多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月前
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
|
6月前
|
负载均衡 网络协议 数据安全/隐私保护
详解配置代理和IP设置的含义
详解配置代理和IP设置的含义
|
6月前
leetcode:1108. IP 地址无效化
leetcode:1108. IP 地址无效化
34 0
|
安全 网络安全 CDN
ip查询显示泛播是什么意思?
好奇openai的请求是如何转发的。
9364 0
|
网络协议 应用服务中间件 网络安全
限定源端口访问目标
限定源端口访问目标 1.1. 起因 在渗透测试时,客户需要对我们的测试IP进行加白,但是此次客户要求精确到固定端口或者小范围端口(不能1-65535),根据以前的经验,默认是加白IP和全端口,因为代理建立连接使用的端口是随机的,所以这次算是从头查找资料总结一下各种指定源端口的方式。 这里的端口是指与目标建立连接时使用的源端口,而不是代理监听的端口。 1.2. 注意 最
6584 1
|
JavaScript 前端开发 中间件
如何根据 IP 获取位置?
现在很多带有社交性质的应用都陆续的添加了显示地区的功能。为什么要公布属地呢? 其实主要目的还是为了净化网络空间,减少网暴的或者谣言的出现。 那么如何判断用户的地址呢? 答:IP。
615 0
|
监控 大数据 定位技术
|
安全 物联网 网络安全
什么是 IP 地址 – 定义和解释
IP 代表“互联网协议”,它是控制通过互联网或本地网络发送的数据格式的一组规则。
534 0
什么是 IP 地址 – 定义和解释