2012-09-17 28 views
0

是否有可能強制Web服務客戶端從特定範圍的端口E.g. 4900- 4999到端口80的Web服務器?如何強制Web服務客戶端使用特定的端口?

我現在明白有客戶端和服務器端口號,需要創建客戶端應用程序來向Web服務器發送http狀態,但防火牆團隊僅在客戶端打開端口4900到4999。

任何想法?

+0

您的防火牆團隊需要重新培訓。限制出站端口不會增加任何安全性,只會給應用程序開發人員帶來這樣的麻煩。沒有用於選擇範圍內的端口的TCP API,因此您必須手動執行此操作。告訴他們停止它。 – EJP

回答

1

如果您使用網絡瀏覽器連接到您的服務器,那麼您可能會倒黴,但正如您在您的問題中所說,您正在創建客戶端應用程序,您可以在Windows和Windows 98中使用bind系統調用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連接。

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服務器上的另一面運行。非常直截了當。謝謝您的幫助。