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

相关文章
|
8月前
|
开发工具
修改IP地址
【2月更文挑战第29天】修改IP地址。
88 2
|
3月前
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
68 1
|
8月前
|
负载均衡 网络协议 数据安全/隐私保护
详解配置代理和IP设置的含义
详解配置代理和IP设置的含义
120 6
|
安全 网络安全 CDN
ip查询显示泛播是什么意思?
好奇openai的请求是如何转发的。
9969 0
|
存储 NoSQL MongoDB
第一个路由节点创建|学习笔记
快速学习第一个路由节点创建
第一个路由节点创建|学习笔记
|
安全 物联网 网络安全
什么是 IP 地址 – 定义和解释
IP 代表“互联网协议”,它是控制通过互联网或本地网络发送的数据格式的一组规则。
560 0
什么是 IP 地址 – 定义和解释

热门文章

最新文章

下一篇
开通oss服务