首先我們供給一台主機,要進行的步驟就是對其主機埠的掃瞄,檢視其中開放的埠。
我們建立乙個tcp的全連線的掃瞄器,使用socket來建立聯結器。
#測試當前主機和埠是否開放,直接使用socket連線def connscan(host,port): try: connskt = socket.socket(socket.af_inet, socket.sock_stream) connskt.connect((host,port)) print("tcp open port:" + str(port)) except: print('tcp closed:'+str(port))
def portscan(tgthost, tgtports): try: tgtip = socket.gethostbyname(tgthost) except: print("[-] cannot resolve '%s': unknown host" % tgthost) return try: tgtname = socket.gethostbyaddr(tgtip) print('\n[+] scan results for: ' + tgtname[0]) except: print('\n[+] scan results for: ' + tgtip) socket.setdefaulttimeout(1) for tgtport in tgtports: print('scanning port ' + str(tgtport)) connscan(tgthost, int(tgtport))
portscan('www.baidu.com', [80,443,3389,1433,23,445])
[+] scan results for: 61.135.169.125scanning port 80tcp open port:80scanning port 443tcp open port:443scanning port 3389tcp closed:3389scanning port 1433tcp closed:1433scanning port 23tcp closed:23scanning port 445tcp closed:445
為了從捕獲我們的目標主機的應用標識,我們必須首先插入額外的驗證**到 connscan函式中。一旦發現開放的埠,我們傳送乙個字串資料到這個端 口然後等待響應。收集這些響應並推斷可能會得到執行在目標主機埠上的應 用程式的一些資訊。
#測試當前主機和埠是否開放,直接使用socket連線def connscan(host,port): try: connskt = socket.socket(socket.af_inet, socket.sock_stream) connskt.connect((host,port)) connskt.send('python\r\n') results = connskt.recv(100) print("tcp open port:" + str(port)) print('[+] ' + str(results)) except: print('tcp closed:'+str(port))def portscan(tgthost, tgtports): try: tgtip = socket.gethostbyname(tgthost) except: print("[-] cannot resolve '%s': unknown host" % tgthost) return try: tgtname = socket.gethostbyaddr(tgtip) print('\n[+] scan results for: ' + tgtname[0]) except: print('\n[+] scan results for: ' + tgtip) socket.setdefaulttimeout(1) for tgtport in tgtports: print('scanning port ' + str(tgtport)) connscan(tgthost, int(tgtport))portscan('www.qq.com', [22,80,443,3389,1433,23,445])
因為每乙個socket都有時間延遲,每乙個socket掃瞄都將會耗時幾秒鐘,雖 然看起來無足輕重,但是如果我們掃瞄多個埠和主機延遲時間將迅速增大。理想情況下,我們希望這些socket按順序掃瞄。引入python執行緒。執行緒提供 了一種同時執行的方式。在我們的掃瞄中利用執行緒,只需將 portscan()函式的迭代改一下。請注意,我們可以把每乙個connscan()函式都 當做是乙個執行緒。在迭代的過程中產生的每乙個執行緒將在同時執行。
python使用nmap埠掃瞄
coding utf 8 usr bin env python import nmap import optparse def nmapscan tgthost,tgtport 建立nmap掃瞄器,初始化portscanner模組 class portscanner init self,nmap s...
TCP埠掃瞄器
乙個基於python3的tcp埠掃瞄器 原理 就是和不同的埠進行tcp連線,能連線成功就表示此埠是開放的,不能連線成就表示此埠是關閉的。import socket import re import threading import time lock threading.lock threads l...
python實現埠掃瞄
一 import socket import multiprocessing def ports ports service 獲取常用埠對應的服務名稱 for port in list range 1,100 143,145,113,443,445,3389,8080 try ports servi...