如何强制Web服务客户端使用特定端口?

时间:2012-09-17 16:36:30

标签: web-services networking network-programming client

是否可以强制Web服务客户端从特定范围的端口进行通话。 49到4999到80端口的Web服务器?

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果您使用网络浏览器连接到您的服务器,那么您可能会运气不好但正如您在问题中所说的那样,您正在创建客户端应用程序,您可以使用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进行连接。

答案 1 :(得分: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服务器。挺直的。谢谢你的帮助。