gpt4 book ai didi

python - 路由器后面的服务器

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:16 25 4
gpt4 key购买 nike

我正在尝试在路由器后面设置服务器,并且我已经能够将其减少到以下问题:

我使用:

  1. 西门子 SL2-141 路由器。
  2. Windows 7 64 位和 Python 2.7。

我跑:

  • 服务器.py:

    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((IP, 8080))
    sock.listen(1)
    sock.accept()
    print 'success'
    sock.close()
  • 客户端.py:

    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((IP, 8080))
    sock.close()
<小时/>
  1. 当 IP =“127.0.0.1”时有效
  2. 我设置了静态 IP:

    > Network And Sharing Center > Change Adaper Settings > Local Area Connection
    > Properties > Internet Protocol Version 4 (TCP/IPv4) > Properties
    > Use The Following IP Address:

    IP Address: 10.0.0.200
    Subnet Mask: 255.0.0.0
    Default Gateway: 10.0.0.138

    > Use The Following DNS Server Addresses:

    Preferred DNS Server: 10.0.0.138
    Alternate DNS Server: - - - -

    当 IP = '10.0.0.200' 时它有效

  3. 我在路由器上设置了端口转发:

    > http://10.0.0.138/
    > Username: Admin
    > Password: Admin
    > Advanced > Virtual Server > Port Forwarding > Add:

    User Defined: Test

    From Internal Host IP Address: ALL
    Forward to Internal Host IP Address: 10.0.0.200

    Protocol: TCP
    External Packet Port Start: 8080
    External Packet Port End: 8080
    Forward To Internal Host Port Start: 8080
    Forward To Internal Host Port End: 8080

    > Apply (and reboot router, just in case).

    据我了解,如果我保留服务器 IP“10.0.0.200”并将客户端 IP 设置为我的公共(public) IP,它应该可以工作,但是它不起作用(“无法建立连接”是因为目标机器主动拒绝了”)。

我尝试用 Apache 服务器做同样的事情,结果相似:浏览本地主机有效,浏览静态 IP 有效,但浏览公共(public) IP 不起作用(端口 80 给了我路由器设置页面,端口 80 给了我路由器设置页面8080 无法连接)。

最后的注释:

  • 我关闭了防火墙。
  • 我检查了端口是否已打开 ( http://www.canyouseeme.org/ ),确实如此。
  • 我检查了服务器是否正在监听(netstat -na | find/i "8080")并且确实如此。

有什么想法吗?

最佳答案

To my understanding, if I leave the server IP '10.0.0.200' and set the client IP to my public IP it should work, but it doesn't work.

没错,如果客户端位于外部网络上。在本地网络上,如果您使用公共(public)地址,它可能会也可能不会工作,具体取决于您的路由器是否实现 NAT 反射(如果没有,它将丢弃数据包)。您应该使用本地网络上的本地(私有(private))IP 地址。许多路由器允许您为本地资源配置 DNS 记录(覆盖来自 DNS 服务器的记录,实现一种“拆分 DNS”)。这样您就可以使用一个 DNS 名称来获取正确的地址。

如果您的问题是来自外部网络上客户端的连接,那么听起来您的 NAT 路由器似乎没有端口转发。我没有您的路由器型号,但我看到了这一行:

From Internal Host IP Address: ALL

想知道是否必须允许来自外部

此外,您确定已启用此规则吗? (我之所以这么问,是因为上次我遇到这样的问题时,我已经正确创建了转发规则,但没有启用。)

如果您仍然遇到问题,请尝试删除规则并重新测试端口是否对 http://www.canyouseeme.org/ 开放。 。我还会在不运行服务器程序时重新测试(以测试外部端口扫描是否具有误导性,这种情况可能会发生)。

最后,当你写下:

I turned off my firewall.

您是指 Windows 防火墙吗?您还需要仔细检查这一点,因为 Windows 防火墙可以允许本地连接,同时阻止远程连接。

关于python - 路由器后面的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com