多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中配置的顺序。

相关文章
|
2月前
leetcode:1108. IP 地址无效化
leetcode:1108. IP 地址无效化
19 0
|
12月前
|
安全 网络安全 CDN
ip查询显示泛播是什么意思?
好奇openai的请求是如何转发的。
7012 0
|
12月前
|
Shell 开发工具
写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问
写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问
90 0
|
JavaScript 前端开发 中间件
如何根据 IP 获取位置?
现在很多带有社交性质的应用都陆续的添加了显示地区的功能。为什么要公布属地呢? 其实主要目的还是为了净化网络空间,减少网暴的或者谣言的出现。 那么如何判断用户的地址呢? 答:IP。
539 0
|
监控 大数据 定位技术
|
前端开发
前端IP位置定位以及访问日志问题解决
前端IP位置定位以及访问日志问题解决
|
安全 物联网 网络安全
什么是 IP 地址 – 定义和解释
IP 代表“互联网协议”,它是控制通过互联网或本地网络发送的数据格式的一组规则。
430 0
什么是 IP 地址 – 定义和解释
|
SQL 关系型数据库 PostgreSQL
ip地址段查询深度优化案例详解
如何在庞大的ip地址库中快速找到某个IP地址的归属地?本文比较几种不同优化方法。
1605 0