具体问题:
服务器A和服务器B,将A服务器中的数据传输出去,使用B接收数据,但是B是内网(外界无法访问但可以访问互联网),A中的数据无法直接传递给B服务器,该怎么处理数据?
首先可以肯定使用ssh tunnel 实现端口转发来进行数据的传输
其次B服务器由于是内网可以访问外网,可以将自己的接口重定向到远端,也就是A服务器,也就是说自身端口可以将数据转发出去,也就是可以将数据传输给A服务器端口(tunnel 实现端口转发就是将自己的端口发送给远端服务器)
A服务器自己监听本地端口即可
#B服务器 发送信息
import socket
import time
def sent_message():
message = "Hello, world!"
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 0))
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
while True:
s.sendto(message.encode(), ('<broadcast>', 9000))
print(f"Message '{message}' has been broadcasted.")
time.sleep(1)
if __name__ == '__main__':
sent_message()
#A服务器 接收信息
import socket
def get_message():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 9000))
s.settimeout(5)
try:
while True:
data, addr = s.recvfrom(1024)
print("Received message:", data.decode(), "from", addr)
except socket.timeout:
print("No data received within timeout.")
if __name__ == '__main__':
get_message()
ssh -L 9000:localhost:9000 A_username@A_IP
这样就可以使得内网的数据传输到外网中来