使用BASH查找内部IP地址

wra*_*ler 3 ip bash scripting networking tcp

我已经知道让你的内部IP的多种方式(使用ifconfig,IP地址,/ etc/hosts文件,等等),但我试图写一个bash脚本,将始终返回内部IP.问题是,许多单行(/ sbin目录/使用ifconfig | grep的INET |头-1 | SED的/ \:/ /'| awk的 '{打印$ 3}')可以返回多个IP地址,我需要区分内部一个手动.

我怀疑是电脑,也没有之间与外部IP和内部IP,因此没有100%,保证的方式得到正确的IP差异.

最终结果是该脚本将返回内部IP,无论其是192地址还是204地址等.

提前致谢.

Keo*_*ope 8

" hostname -i"希望能给你相同的结果


int*_*ted 5

正如其他人所提到的,机器并没有真正保证,甚至可能只有一个IP地址.我不确定你所说的"内部知识产权"是什么意思; 有时这可能意味着"本地网络上的IP地址",即连接到启用NAT的防火墙的接口.

我认为最好的方法是连接到您想要的网络上的主机,并使用该连接所源自的地址.这将是机器通常用于连接到该网络的接口.用户Unkwntech在这个帖子上有同样的想法.以下代码仅从该答案中获取.

我不知道这是否真的有资格作为"bash"解决方案,因为它只是一个内联Python脚本,但无论如何这将获得用于访问google.com的本地IP地址.因此,这将为您提供机器用于访问Internet主机的任何接口的IP地址.

$ python -c 'import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("google.com", 80))
print s.getsockname()[0]'
Run Code Online (Sandbox Code Playgroud)

更多的bash-y解决方案可能会使用tracepath或类似的实用程序.