是否有可能強制Web服務客戶端從特定範圍的端口E.g. 4900- 4999到端口80的Web服務器?如何強制Web服務客戶端使用特定的端口?
我現在明白有客戶端和服務器端口號,需要創建客戶端應用程序來向Web服務器發送http狀態,但防火牆團隊僅在客戶端打開端口4900到4999。
任何想法?
是否有可能強制Web服務客戶端從特定範圍的端口E.g. 4900- 4999到端口80的Web服務器?如何強制Web服務客戶端使用特定的端口?
我現在明白有客戶端和服務器端口號,需要創建客戶端應用程序來向Web服務器發送http狀態,但防火牆團隊僅在客戶端打開端口4900到4999。
任何想法?
如果您使用網絡瀏覽器連接到您的服務器,那麼您可能會倒黴,但正如您在您的問題中所說,您正在創建客戶端應用程序,您可以在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連接。
如果別人需要它,這裏是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服務器上的另一面運行。非常直截了當。謝謝您的幫助。
您的防火牆團隊需要重新培訓。限制出站端口不會增加任何安全性,只會給應用程序開發人員帶來這樣的麻煩。沒有用於選擇範圍內的端口的TCP API,因此您必須手動執行此操作。告訴他們停止它。 – EJP