如何用C++编程获得某台机器的IP地址

如何用C++编程获得某台机器的IP地址,第1张

要获取IP地址,首先必须得到机器的主机名(host

name),调用gethostname就可以实现,有了主机名,接下来调用gethostbyname来获取包括IP地址在内的更多的主机信息。gethostbyname返回一个指向hostent数据结构的指针,这个结构在<winsockh>文件中是这样定义的:

//

来自winsockh

struct

hostent

{

char

FAR

h_name;

/

正式的主机名/

char

FAR

FAR

h_aliases;

/

别名列表/

short

h_addrtype;

/

主机地址类型/

short

h_length;

/

地址长度/

};

这是个典型的底层APIs使用的数据结构,很多人都不是很熟悉它。实际上,hostent是一个变长的数据结构,h_name是主机名,在例子程序中的值为

"zxnhangwiresdb"。没有别名(h_aliases)。h_addrtype是地址类型(或者也叫地址家族),在例子程序中的值为2(AF_INET

=

internet,其它内容参见winsockh)。h_length是每一个地址的长度,以字节为单位。因为IP地址的长度是4个字节,所以在例子程序中的值为4,h_addr_list是地址数组的开始点,它们一个接着一个存放,结尾是一个null。每一个xyzw数字占一个字节。为了将IP地址格式化为xyzw的形式,必须将地址数组先拷贝到一个叫sockaddr的数据结构中,然后调用一个特殊的函数inet_ntoa。

图二是hostent

结构在内存中存放示意图:

图二hostent

结构在内存中的存放示意图

相信以上的解释再辅以阅读代码,你以后不再会对hostent结构感到陌生。

最后,顺祝编程愉快!

是不可以的主机名只能在同一网段使用,其原理是,同一网段内,A访问B的主机名,是在网络上发一个广播包进行查询,B接收到这个广播包并且回包告诉A,“你找的就是我”,并且将自己的IP告诉A,A通过IP与B建立连接;也就是说,你虽然输入的是主机名,实际上是使用IP进行通信连接的。不通网段时间,广播包是不能透传的,网段划分的初衷就是为了隔离广播包,减少广播风暴。

在命令行模式下,获取当前主机名称:

在命令行模式下,获取IP地址:

在shell脚本中获取当前主机的主机名以及IP地址:

说明:

`` 表示执行该语句,并返回执行后的结果;

grep -A1 "eth0" 表示找出带有“eth0”的行,输出中除显示该行外,还显示之后的一行;

awk 则是进行分割。

以上就是关于如何用C++编程获得某台机器的IP地址全部的内容,包括:如何用C++编程获得某台机器的IP地址、跨网段通过主机名能获得ip吗、【Linux】在shell脚本中获取当前主机的主机名以及IP地址等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9498392.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存