今天分享的部分算是額外的內容,
如果對於Python沒有興趣或是想專注在課程主軸的,這篇可以跳過不會影響
但是,編寫python可以用另一個角度,透過代碼更加理解port掃描哦
今天分享的代碼是一個簡單的端口掃描工具,用來檢查指定目標IP地址的一系列port是否開放
這段代碼是一個簡單的端口掃描工具,用來檢查指定目標IP地址的一系列端口是否開放。以下是逐步解釋和說明代碼的作用:
導入模塊
import socket
import termcolor
socket
模塊提供了網絡連接相關的功能。termcolor
模塊用於在終端上顯示彩色文本。定義 scan_ports
函數
def scan_ports(target, number_of_ports):
"""
掃描指定目標的開放端口。
:param target: 要掃描的目標IP地址。
:param number_of_ports: 要掃描的端口範圍(從1開始)。
"""
print('\nStarting Scan For ' + target)
for port in range(1, number_of_ports + 1):
check_port(target, port)
target
是目標IP地址,number_of_ports
是要掃描的端口數量。number_of_ports
的每個端口,調用 check_port
函數進行檢查。定義 check_port
函數
def check_port(ip_address, port):
"""
檢查指定IP地址的特定端口是否開放。
:param ip_address: 目標IP地址。
:param port: 要檢查的端口號。
"""
try:
# 建立套接字連接
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
# 設定連接超時時間為1秒
sock.settimeout(1)
# 嘗試連接目標IP和端口
result = sock.connect_ex((ip_address, port))
if result == 0:
print(termcolor.colored(f"[+] Port {port} is Open", 'green'))
except Exception as e:
print(termcolor.colored(f"[-] Error scanning port {port}: {e}", 'red'))
socket
模塊創建一個TCP連接,設置超時時間為1秒。connect_ex
方法嘗試連接目標IP和端口。如果連接成功(返回值為0),則該端口是開放的。定義 main
函數
def main():
"""
主程序,負責獲取用戶輸入和啟動端口掃描。
"""
targets = input("[*] Enter Targets To Scan (split them by ','): ").split(',')
ports = int(input("[*] Enter Number Of Ports To Scan (1 to n): "))
for target in map(str.strip, targets): # 去除每個IP地址的多餘空格
print(termcolor.colored(f"[*] Scanning Target: {target}", 'blue'))
scan_ports(target, ports)
scan_ports
函數進行掃描。主程序入口
if __name__ == "__main__":
main()
main
函數啟動程序。這段代碼用來進行一個簡單的掃描,通過嘗試連接指定目標的各個端口來檢查它們是否開放,並且使用 termcolor
模塊在終端上以彩色顯示結果。
以下是完整的程序,可以參考看看
import socket
import termcolor
def scan_ports(target, number_of_ports):
"""
掃描指定目標的開放端口。
:param target: 要掃描的目標IP地址。
:param number_of_ports: 要掃描的端口範圍(從1開始)。
"""
print('\nStarting Scan For ' + target)
for port in range(1, number_of_ports + 1):
check_port(target, port)
def check_port(ip_address, port):
"""
檢查指定IP地址的特定端口是否開放。
:param ip_address: 目標IP地址。
:param port: 要檢查的端口號。
"""
try:
# 建立套接字連接
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
# 設定連接超時時間為1秒
sock.settimeout(1)
# 嘗試連接目標IP和端口
result = sock.connect_ex((ip_address, port))
if result == 0:
print(termcolor.colored(f"[+] Port {port} is Open", 'green'))
except Exception as e:
print(termcolor.colored(f"[-] Error scanning port {port}: {e}", 'red'))
def main():
"""
主程序,負責獲取用戶輸入和啟動端口掃描。
"""
targets = input("[*] Enter Targets To Scan (split them by ','): ").split(',')
ports = int(input("[*] Enter Number Of Ports To Scan (1 to n): "))
for target in map(str.strip, targets): # 去除每個IP地址的多餘空格
print(termcolor.colored(f"[*] Scanning Target: {target}", 'blue'))
scan_ports(target, ports)
if __name__ == "__main__":
main()