總覽
這篇文章將向您展示如何製編寫端口掃描程序。使用Python可以執行多種操作,而我將使用內置模塊Socket(套接字)來完成此操作。
Socket(套接字)
Python中的Socket(套接字)模塊提供對BSD套接字接口的訪問。它包括用於處理實際數據通道的Socket(套接字)類,以及用於網絡相關任務的功能,例如將服務器的名稱轉換為地址並格式化要通過網絡發送的數據。
套接字在Internet上被廣泛使用,因為它們是計算機進行任何類型網絡通信基礎組件。例如,您使用的網絡瀏覽器會打開一個套接字並連接到網絡服務器(網站)。任何網絡通信都通過套接字進行,有關套接字模塊的更多信息,請參見官方文檔。
套接字功能
在開始使用示例程序之前,讓我們看一下將要使用的一些套接字函數。
sock = socket.socket(socket_family,socket_type)
創建套接字的語法
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
創建一個流套接字
AF_INET
套接字族(此處為地址族版本4或IPv4)
SOCK_STREAM
套接字類型TCP連接
SOCK_DGRAM套接字類型UDP連接
gethostbyname(“host”)
將主機名轉換為IPv4地址格式
socket.gethostbyname_ex(“host”)
將主機名轉換為IPv4地址格式,擴展接口
socket.getfqdn(“8.8.8.8”)
獲取fqdn(完全限定域名)
socket.gethostname()
返回計算機的主機名。
socket.error
套接字錯誤異常處理
使用Python套接字編寫程序
下麵介紹如何使用Python創建一個簡單的端口掃描程序,該小型端口掃描程序將嘗試在您為特定主機定義的每個端口上建立連接。
打開文本編輯器,複製並複製粘貼下麵的代碼。將文件另存為:portscanner.py,並退出編輯器
#!/usr/bin/env python
import socket
import subprocess
import sys
from datetime import datetime
# Clear the screen
subprocess.call('clear', shell=True)
# Ask for input
remoteServer = raw_input("Enter a remote host to scan: ")
remoteServerIP = socket.gethostbyname(remoteServer)
# Print a nice banner with information on which host we are about to scan
print "-" * 60
print "Please wait, scanning remote host", remoteServerIP
print "-" * 60
# Check what time the scan started
t1 = datetime.now()
# Using the range function to specify ports (here it will scans all ports between 1 and 1024)
# We also put in some error handling for catching errors
try:
for port in range(1,1025):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((remoteServerIP, port))
if result == 0:
print "Port {}: Open".format(port)
sock.close()
except KeyboardInterrupt:
print "You pressed Ctrl+C"
sys.exit()
except socket.gaierror:
print 'Hostname could not be resolved. Exiting'
sys.exit()
except socket.error:
print "Couldn't connect to server"
sys.exit()
# Checking the time again
t2 = datetime.now()
# Calculates the difference of time, to see how long it took to run the script
total = t2 - t1
# Printing the information to screen
print 'Scanning Completed in: ', total
然後我們運行程序,看看輸出什麽:
$ python portscanner.py
Enter a remote host to scan: www.your_host_example.com
------------------------------------------------------------
Please wait, scanning remote host xxxx.xxxx.xxxx.xxxx
------------------------------------------------------------
Port 21: Open
Port 22: Open
Port 23: Open
Port 80: Open
Port 110: Open
Port 111: Open
Port 143: Open
Port 443: Open
Port 465: Open
Port 587: Open
Port 993: Open
Port 995: Open
Scanning Completed in: 0:06:34.705170
免責聲明
該程序旨在供個人測試其設備的弱安全性,如果將其用於任何其他用途,作者將不承擔任何責任。