我一直在互联网上寻找答案,但到目前为止还没有找到。我对网络非常陌生,所以请接受我对它几乎一无所知。我可以使用套接字在 LAN 网络上的计算机之间发送数据,但我想知道是否可以连接到我朋友家的计算机,并仅使用套接字(没有 telnet)向我们的计算机发送数据和从我们的计算机发送数据或 netcat 服务器)。或者这是不可能的,我应该查看不同的python库还是应该设置某种服务器,两台机器都可以连接?
任何帮助将不胜感激,请考虑到我是新手...
这是可能的,但需要在您朋友的路由器上进行一些配置。原因是现在每个人都有一个由您的服务提供商提供的公共 IP 地址。这个IP地址本身不是固定的,但是很容易查到当前IP是什么@ https://www.whatismyip.com/
现在发送不会成为问题,但接收是。像比利时 Telenet 这样的一些服务提供商不允许使用任何端口,您必须找出允许使用哪些端口。众所周知的端口很可能是不允许的。例如,如果不先联系您的 ISP,就不可能托管网络服务器。例如端口 10000 将工作。请联系您的 ISP 以了解此类限制。
下一个问题是你们都有一个路由器和一个私有网络,在一个支持 NAT/PAT 的路由器后面有一个私有 IP@。例如,如果我在我的电脑上执行 ipconfig,我会得到以下 IP@192.168.1.99。这个IP@在我的路由器后面是唯一的,但它在整个互联网上不是唯一的,所以在通过互联网通信时不能直接使用这些IP@。所以路由器将使用 NAT/PAT 和一些基于传出数据包填充的查找表。你发送一些东西,建立 nat/pat 表,你的私有 IP@ 被替换为公共 IP@ 和一个分配的端口。当您收到回复时,该端口用于将其更改回原始请求的 IP@。出于这个原因,发送不是问题,但接收是。
要解决此问题,您的朋友必须设置端口转发或将 PC 置于隔离区,这取决于相关路由器。端口转发就像用一个条目手动填充 NAT/PAT 表。如果有东西到达此端口,请使用该端口将其发送到该私有 IP@。
发送和接收机器的下一个问题是防火墙。防火墙必须关闭或配置为允许您计划使用的端口上的传出和传入流量。
如果您了解所有这些,那么您就可以让它发挥作用。但如果这对你来说都是中国化,那么你将有很多困难要让它发挥作用。所以结论是这是可能的,但有很多需要解决的问题。有很多问题的人试图完全按照您在此处描述的方式进行操作,但在使其工作时遇到了很多麻烦。如果你真的是一个新手,我会试着找一个有经验的人,否则你会失去你的头发。(从沮丧中自己拔出来)
您使用的是 python 或任何其他编程语言这一事实与本讨论无关。这纯粹是一个网络问题。
有关 NAT/PAT 的更多信息:http : //www.webopedia.com/DidYouKnow/Computer_Science/NAT_and_PAT.asp
套接字应该可以工作,但有一些注意事项:
如果您的网络如下所示:
+---------------+ +-----------+ +--------+ +---------------+ +------------------+
| Your computer |-->|Your router|-->|Internet|-->|Friend's router|-->|Friends's computer|
+---------------+ +-----------+ +--------+ +---------------+ +------------------+
192.168.0.5 host.isp.com friend.isp.com 192.168.2.55
Run Code Online (Sandbox Code Playgroud)
你的朋友在他的本地网络上运行服务器,端口 9000(例如),然后你连接到friend.isp.com:9000。如果他们的路由器配置为将friend.isp.com 接口(互联网)上的端口9000 上的流量重定向到192.168.2.55(本地机器),则应该正确建立连接。
对的,这是可能的。
您所需要的只是要连接的计算机的主机名或 IP 地址和端口号。只要可以建立到远程计算机的路由,就可以建立连接。
看socket模块。这是一个简单的例子:
import socket
s = socket.socket()
s.connect(('123.123.123.123', 10000))
Run Code Online (Sandbox Code Playgroud)
这将尝试在端口 10000 上与 IP 地址为 123.123.123.123 的远程计算机建立 TCP 连接。远程计算机需要打开端口 10000,即监听该端口上连接的服务,并且端口 10000 也处于打开状态。在任何防火墙设备中。
您还可以使用主机名来代替 IP 地址:
s.connect(('remote.host.com', 10000))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13183 次 |
| 最近记录: |