是否可以强制 Web 服务客户端从特定范围的端口(例如 4900-4999)与端口 80 中的 Web 服务器通信?
我现在知道有客户端和服务器端口号,需要创建一个客户端应用程序来将 http 状态发送到 Web 服务器,但防火墙团队只在客户端打开端口 4900 到 4999。
有任何想法吗?
是否可以强制 Web 服务客户端从特定范围的端口(例如 4900-4999)与端口 80 中的 Web 服务器通信?
我现在知道有客户端和服务器端口号,需要创建一个客户端应用程序来将 http 状态发送到 Web 服务器,但防火墙团队只在客户端打开端口 4900 到 4999。
有任何想法吗?
如果您使用 Web 浏览器连接到服务器,那么您可能不走运,但正如您在问题中所说,您正在创建客户端应用程序,您可以使用bind
Windows 和 Linux 中的系统调用来执行此操作(此代码是在 C) 中:
struct sockaddr_in client;
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
memset(&client, 0, sizeof(client));
client.sin_family = AF_INET;
client.sin_addr.s_addr = htonl(INADDR_ANY);
client.sin_port = htons(4901);
然后调用bind
:
res = bind(sock, (struct sockaddr *)&client, sizeof(client));
如果此调用成功(res 为 0),您可以将您的套接字连接到服务器,您将从端口 4901 连接。
如果其他人需要它,这里是执行此操作的 Python 代码:
#!/usr/bin/env python
from socket import *
import time
HOST = '**.**.**.**' # IP of the server
PORT = 8080
GET = '/hello/There'
BUFSIZ = 1024
ADDR = (HOST, PORT)
sock = socket(AF_INET, SOCK_STREAM)
sock.bind(('',4925))
sock.connect(ADDR)
print 'connected'
request = """GET %s HTTP/1.0\n
Host: %s\n
User-Agent: Python\n
\n""" % (GET, HOST)
sock.send(request)
data = sock.recv(1024)
string = ""
while len(data):
string = string + data
data = sock.recv(1024)
print string
sock.close()
这与在另一端运行的 wsgi 服务器一起工作。很直接。谢谢您的帮助。