主机命令和ifconfig给出不同的ips

时间:2018-05-04 02:07:04

标签: python linux networking server ip

我在公司公司内部使用服务器(server_name.corp.com)。在服务器上,我正在运行一个烧瓶服务器来监听0.0.0.0:5000。

服务器不会暴露给外部世界,但可以通过vpns访问。

现在,当我在框中运行host server_name.corp.com时,我会得到一些ip1(10.*.*.*

当我在框中运行ifconfig时,它会给我ip2(10.*.*.*)。

此外,如果我在同一个框中运行ping server_name.corp.com,我会获得ip2。

我也可以使用ip1而不是ip2进入服务器

我可以通过ip1:5000访问烧瓶服务器,但不能访问ip2:5000。

我没有进入网络如此充分地混淆为什么有2个不同的ips以及为什么我可以从浏览器访问ip1:5000而不是ip2:5000。

还有什么相当于python中的host命令(如何从python中获取ip1。我正在使用socktet.gethostbyname(server_name.corp.com),它给了我ip2)

2 个答案:

答案 0 :(得分:0)

据我所知,您配置了某种路由,允许通过主机名(或ip1)与服务器进行外部连接,但不允许通过ip2进行连接。这并没有什么不寻常之处。系统管理员可能会建议为什么这样做。假设没有同步网络路由,以下函数可以帮助确定服务器的公共IP:

import socket

def get_ip():
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        sock.connect(("8.8.8.8", 80))
        local_address = sock.getsockname()
        sock.close()
        local_address = local_address[0]
    except OSError:
        local_address = socket.gethostbyname(socket.gethostname())

    return local_address

答案 1 :(得分:0)

你的语句对网络状态不太清楚,我只能告诉你,如果你想通过python获取ip1,你可以使用标准的lib subprocess,它通常用于执行os命令。 (见subprocess.Popen