Python的BaseHTTPServer监听端口只能通过localhost打开,内网IP不能访问

Python09

Python的BaseHTTPServer监听端口只能通过localhost打开,内网IP不能访问,第1张

下面是java的例子,但是原理一样的

【起因】

同事要参考我写的一个项目的效果,在本机发布以后发现通过局域网IP无法访问,但是localhost和127.0.0.1可以访问

【经过】

配置tomcat的server.xml, 更改connector配置, 端口不用改, 加上address="0.0.0.0", 使其绑定到IPv4, 如下

(借鉴的解决方案)

<1>使用cmd命令netstat -n, 查看tomcat地址绑定, 发现是绑定到127.0.0.1

<2>配置tomcat的server.xml, 更改connector配置, 端口不用改, 加上address="0.0.0.0", 使其绑定到IPv4

<Connector port="8080" maxHttpHeaderSize="8192" address="0.0.0.0"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" />

<3>重启tomcat, 再次使用netstat -n, 查看tomcat地址绑定, 已变为IPv4.

【结果】

可以通过局域网IP访问了。

楼主对于os.system方法理解有误,不是你PING不通才返回的0,

os.system只是帮你执行命令而已,如果这个命令是有效的他返回0,如果无效则返回1,你可以试试os.system('abc')他是返回1的(因为abc这个命令是无效的),对于你的PING命令来说,只要他能成功执行无论PING通不PING通他都会返回0.

你要测试网络是否通不能采用这种方式,应该使用PYTHON自带的库。

方法一可能有的获取不到ip(比如没有正确设置up名称)

方法一

import socket

#获取计算机名称

hostname=socket.gethostname()

#获取本机IP

ip=socket.gethostbyname(hostname)

print(ip)

方法二

import socket

def get_host_ip():

    """

    查询本机ip地址

    :return:

    """

    try:      s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

        s.connect(('8.8.8.8',80))

        ip=s.getsockname()[0]

    finally:

        s.close()

    return ip

if __name__ == '__main__':

    print(get_host_ip())