【问题标题】:Why is my client only working on my computer but not on any other computer为什么我的客户只能在我的电脑上工作,而不能在任何其他电脑上工作
【发布时间】:2021-03-27 14:03:08
【问题描述】:

我目前正在尝试通过使用 python 和套接字导入制作特洛伊木马来了解服务器和客户端的工作方式,我的客户端和服务器在我的计算机上完美运行,但是当我将客户端发送到另一台笔记本电脑时,服务器无法连接。即使我在同一个 wifi 网络上也会发生这种情况。

服务器:

import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = ''
port = 1234

server.bind((host, port))
server.listen(5)

run = True
client, addr = server.accept()
print('Got connection from',addr)

while run:
    try:
        data = input('>>>')

        client.send(data.encode('UTF-8'))

        msg = client.recv(1024)
        print(msg.decode('UTF-8'))
    except ConnectionResetError:
        print('Client lost server connection')
        print('Trying to connect . . .')
        client, addr = server.accept()
        print('Got connection from',addr)


客户:

import socket
import os
server = socket.socket()
host = '127.0.0.1'
port = 1234

run = True
server.connect((host,port))
while run:


    msg = server.recv(1024)
    os.popen(msg.decode('UTF-8'))

    server.send('Client online . . .'.encode('UTF-8'))

【问题讨论】:

    标签: python python-3.x sockets server client


    【解决方案1】:

    您的客户端正在连接到 IP 127.0.0.1(IPv4 环回地址),这仅在服务器与客户端位于同一台计算机上时才有效。

    当客户端和服务器在不同的机器上,但仍然在同一个局域网上时,客户端需要连接到服务器的局域网IP。在服务器机器上使用netstat 或类似工具来查找其局域网IP。或者,只需让您的服务器代码print out its local IPs

    当客户端在另一个网络上时,它需要连接到服务器的 LAN 路由器的公共 WAN IP,并且该路由器需要在其上配置 端口转发 以路由来自其的传入连接WAN IP/Port 到服务器的 LAN IP/端口。要获取 WAN IP,您必须查看路由器的配置,或者只需从 LAN 上的机器(例如您的服务器)查询外部站点,例如 https://api.ipify.orghttps://api.my-ip.io/ip 等。

    更新您的客户端以从用户输入中获取目标主机/IP,然后它将能够处理所有这些场景,而不必每次都使用不同的代码。

    【讨论】:

      猜你喜欢
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多