我剛剛開始學習python編程,並且一直在學習關於編程套接字的教程,以創建一個簡單的端口掃描器。當我手動輸入所有代碼進行一次迭代時,我能夠成功連接到本地主機,但是如果我使用相同的代碼,並在利用try/except的for循環中應用它,我會立即爲每個端口獲取異常在這個範圍內,即使我知道有些港口是開放的。我相信我已經將問題隔離到了socket.connect(),因爲我已經輸入了下面的代碼,我知道它永遠不會被執行。一旦爲什麼在Python 3.4的循環中使用socket.connect()時會停止工作?
b'SSH-2.0-OpenSSH_6.2\r\n'
Process finished with exit code 0
然而,正如我之前的代碼,並將其移動到與循環:
我可以輸入以下代碼,並得到成功的回報:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
port = 22
s.connect(('127.0.0.1', port))
s.send(b'test')
banner = s.recv(1024)
print(banner)
s.close()
回報端口號作爲迭代器,它停止工作。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
for port in range(1,26):
print("[+]Attempting to connect to : " + str(port))
try:
s.connect(('127.0.0.1', port))
s.send(b'test')
banner = s.recv(1024)
s.close()
if banner:
print("Port " + port + "is Open: " + banner)
except: print("[+]Port " + str(port) + " is closed")
回報:
[+]Attempting to connect to : 1
[+]Port 1 is closed
[+]Attempting to connect to : 2
[+]Port 2 is closed
[+]Attempting to connect to : 3
[+]Port 3 is closed
....ETC....ETC....ETC....
[+]Attempting to connect to : 24
[+]Port 24 is closed
[+]Attempting to connect to : 25
[+]Port 25 is closed
即使我知道22端口是開放的,監聽本地主機。 (即我可以沒有問題地ssh到127.0.0.1)。我嘗試了所有我能想到的無用功,包括通過使用內部int()函數手動更改端口的數據類型爲int,我試過了socket.connect_ex對象等。我也把代碼就在socket.connect語句下面,看看它是否顯示出來,它從來沒有做過。
打印實際的錯誤,不要補一個。什麼是提出的實際例外?我猜想,因爲你關閉了套接字,所以你不能重用它。爲每個連接嘗試創建一個新的套接字對象。 – dsh