主机命令和ifconfig显示不同的IP地址

2024-05-23 16:41:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用服务器_name.corp.com公司)公司内部。在服务器上,我运行一个flask服务器来监听0.0.0.0:5000。你知道吗

服务器不暴露于外界,但可以通过VPN访问。你知道吗

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

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

同样,如果在同一个框中运行ping server_name.corp.com,则得到ip2。你知道吗

我也可以ssh到服务器与ip1不是ip2

我可以在ip1:5000上访问flask服务器,但不能在ip2:5000上访问。你知道吗

我不喜欢网络,所以完全搞不清楚为什么有两个不同的IP,为什么我可以从浏览器访问ip1:5000而不是ip2:5000。你知道吗

还有python中host命令的等价物(如何从python获取ip1)。我正在使用socketet.gethostbyname(服务器)_name.corp.com公司)这给了我ip2)


Tags: name服务器comhostflaskserver公司vpn
2条回答

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

据我所知,您配置了某种路由,允许通过主机名(或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

相关问题 更多 >