NAT后面的点对点连接

时间:2013-11-17 16:07:49

标签: networking tcp udp network-protocols tcp-ip

我制作了一个简单的网络应用程序,它是通过LAN进行通信的服务器客户端。

  

客户端

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)         
host = socket.gethostname() 
port = 8080               
s.connect(("117.219.195.10", port))
s.send('q\n');
s.send('boo\n\r');
s.close
  

服务器

import socket               
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)         
host = socket.gethostname()
print host
port = 8080                
s.bind(("", port))       
s.listen(5)                 
while True:
   c, addr = s.accept()     
   print 'Got connection from', addr
   c.send('Thank you for connecting\r\n')
   c.close()

但是当服务器在NAT之后我需要在路由器中配置NAT表,我可以在没有配置路由器的情况下进行点对点连接吗?我可以在数据包本身中嵌入NAT表的信息(比如在哪个ip上重定向),这样当数据包从互联网到路由器时,它知道局域网中的哪个IP应该得到它。

2 个答案:

答案 0 :(得分:0)

可以开发一个利用NAT Traversal技术(如STUN)在NAT设备之间创建隧道的应用程序。查看这些主题以找到适合您的解决方案。

答案 1 :(得分:-1)

是的,您确实需要配置端口转发,这通常涉及登录路由器并使用它的管理界面。不,你不能将这些信息嵌入数据包中。

但是您只需要在服务器上执行此操作在服务器上设置端口转发后,您无需为客户端 - 服务器通信进行NAT遍历 ,因为客户端发送服务器的内容将通过服务器(因为您设置了端口转发)从服务器到客户端的回复将由客户端NAT自动转发,因为它将意识到您已建立到TCP连接服务器的终点。 这就是你可以从NAT后面连接到这个网站的方法!