2014-10-04 43 views
2

我有4個人的外部IP。我想連接到他們的IP並從服務器獲得響應。這很奇怪,因爲對於每一個4,tcp協議上的端口都不會連接,但udp協議上的每個端口對於我自己的IP來說都不一樣。Python - 連接到隨機IP並嘗試從服務器獲得響應

import socket, sys 
socket.setdefaulttimeout(8.5) 


del sys.argv[0] 

def connect_send_receive(host, port): 
     try: 
     s = socket.socket((socket.AF_INET, socket.SOCK_DGRAM) #On the Tcp protocol, no single port would connect to one of these 4 addresses. 
     s.connect((host, port)) 
     s.send("I want you to dammit respond me something") #packet request says it all. 
     s.recv(1024) #Server response with nothing. Error here. 
     except: 
     print("No response") 

for connect in sys.argv: 
     connect_send_receive(connect, 80) 

我的問題很清楚。 1.如何讓服務器給我一個迴應,然後。 2.爲什麼在4個隨機的人中,我只能與udp協議連接。我嘗試了tcp上的每個端口,但沒有連接,爲什麼我自己即使使用不同的IP,也可以使用tcp協議連接到自己。

注意:Http請求不在這4個IP上工作。

+0

嘗試使用更簡單的程序,如telnet或nc來查看您嘗試使用的端口是否工作。也許這是一個防火牆問題。 – 2014-10-04 11:08:27

+1

爲什麼*應該*任意主機在隨機端口上接受連接?你知道這些端口中的任何一個是開放的,或者你爲什麼期待響應? – 2014-10-04 11:10:57

+0

我使用了端口掃描儀。 「因此」這4個IP沒有TCP協議端口,但是在udp協議中,範圍內的每個數字(1,10000)都是開放端口。 – Shane 2014-10-04 11:11:02

回答

1

TCP是基於連接的協議。特定的「handshake」必須發生以建立該連接。如果沒有服務正在偵聽您嘗試連接的TCP端口(或者如果防火牆正在過濾到該端口的連接並且您的主機未通過過濾器),那麼您只需從拒絕系統的TCP重置請求。

UDP是無連接協議。發送數據包時沒有響應,除非服務器上的應用程序設計爲發送數據包。如果UDP端口被過濾或沒有服務正在監聽,則數據包將悄悄丟棄 - 不會向發送方指示。

至於你的代碼,SOCK_DGRAM是一個數據報(UDP)套接字。您需要使用STREAM套接字連接到TCP服務。

相關問題