0

是否可以强制 Web 服务客户端从特定范围的端口(例如 4900-4999)与端口 80 中的 Web 服务器通信?

我现在知道有客户端和服务器端口号,需要创建一个客户端应用程序来将 http 状态发送到 Web 服务器,但防火墙团队只在客户端打开端口 4900 到 4999。

有任何想法吗?

4

2 回答 2

1

如果您使用 Web 浏览器连接到服务器,那么您可能不走运,但正如您在问题中所说,您正在创建客户端应用程序,您可以使用bindWindows 和 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 连接。

于 2012-09-17T17:08:20.723 回答
0

如果其他人需要它,这里是执行此操作的 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 服务器一起工作。很直接。谢谢您的帮助。

于 2012-09-17T19:33:41.743 回答