Python檢查端口是否打開的七種方法總結
sock.connect_ex
使用socket模塊的connect_ex來判斷端口是否打開,如果返回值是0表示連接成功,端口打開,否則端口關閉。
import socket def check_port(ip, port): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) try: result = sock.connect_ex((ip, port)) if result == 0: return True else: return False except Exception as e: print(f"錯誤: {str(e)}") finally: sock.close() host = 'localhost' port = 80 if check_port(host, port): print(f'The port {port} on {host} is open.') else: print(f'The port {port} on {host} is closed.')
sock.connect
使用socket模塊的connect來判斷端口是否打開,如果未發(fā)生異常表示連接成功,端口打開,否則端口關閉。
import socket def check_port(host, port): try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(1) sock.connect((host, port)) sock.close() return True except: return False finally: sock.close()
telnet命令
調用telnet命令來判斷端口是否打開。
使用telnet命令:在大多數(shù)操作系統(tǒng)中,telnet命令可以用于測試端口是否開放。你可以在命令行中輸入"telnet <IP地址> <端口>",如果端口是開放的,則telnet會連接成功并返回一些信息。否則,它將返回一個錯誤消息。
import os def check_port(ip, port): result = os.system(f"telnet {ip} {port} > /dev/null 2>&1") if result == 0: print(f"端口 {port} 是開放的") else: print(f"端口 {port} 是關閉的")
nc命令
使用nc命令(也稱為netcat):nc命令是一個強大的工具,可以用于測試端口是否開放。你可以在命令行中輸入"nc -zv <IP地址> <端口>",如果端口是開放的,則nc會連接成功并返回一些信息。否則,它將返回一個錯誤消息。
import os def check_port(ip, port): result = os.system(f"nc -zv {ip} {port} > /dev/null 2>&1") if result == 0: print(f"端口 {port} 是開放的") else: print(f"端口 {port} 是關閉的")
ping命令
使用ping命令:ping命令可以用于測試網(wǎng)絡連接是否暢通,也可以用于檢查端口是否開放。在命令行中輸入"ping <IP地址> -n <端口>",如果端口是開放的,則ping會返回一些信息。否則,它將返回一個錯誤消息。
import os def check_port(ip, port): result = os.system(f"ping {ip} -n {port} > /dev/null 2>&1") if result == 0: print(f"端口 {port} 是開放的") else: print(f"端口 {port} 是關閉的")
注意:如果目標服務器禁用ping,就無法判斷出來了。
requests檢查http端口
requests庫是Python的一個HTTP庫,可以用來發(fā)送所有類型的HTTP請求,包括GET、POST、PUT、DELETE等。它也可以用來處理cookies、會話、重定向等。
要檢查一個端口是否開放,我們通常會使用requests庫來嘗試向該端口發(fā)送HTTP請求,并查看是否能夠成功連接。以下是一個簡單的示例:
import requests def check_port(ip, port): try: response = requests.get(f"http://{ip}:{port}") if response.status_code == 200: print(f"端口 {port} 是開放的") else: print(f"端口 {port} 是關閉的") except requests.exceptions.ConnectionError: print(f"端口 {port} 是關閉的")
在上述代碼中,我們使用requests.get方法向指定的IP地址和端口發(fā)送GET請求。如果請求成功,并且返回的狀態(tài)碼為200,則表示該端口是開放的。如果發(fā)生requests.exceptions.ConnectionError
異常,則表示該端口是關閉的。requests檢查端口方法僅適用于HTTP和HTTPS端口。
Scapy
Scapy是一個強大的Python庫,用于創(chuàng)建、解析、發(fā)送、接收并解析網(wǎng)絡數(shù)據(jù)包。使用Scapy來檢查端口是否開放。
from scapy.all import * def check_port(ip, port): # 構造一個ICMP數(shù)據(jù)包,并發(fā)送到目標IP地址和端口 packet = IP(dst=ip) / ICMP() / Raw(load=str(port)) # 發(fā)送數(shù)據(jù)包并獲取響應 response = sr1(packet, timeout=1) # 檢查響應是否為ICMP錯誤類型 if response is None or response.type != ICMP.DEST_UNREACH: print(f"端口 {port} 是開放的") else: print(f"端口 {port} 是關閉的") # 測試函數(shù) check_port('127.0.0.1', 80)
我們使用Scapy構造了一個ICMP數(shù)據(jù)包,并將目標端口作為負載包含在其中。然后,我們發(fā)送該數(shù)據(jù)包并等待響應。如果響應是ICMP錯誤類型(目的地不可達),則表示端口是關閉的。否則,表示端口是開放的。這種方法只適用于ICMP端口掃描。對于其他類型的端口掃描(如TCP或UDP端口掃描),需要使用不同的協(xié)議和字段。
總結
到此這篇關于Python檢查端口是否打開的七種方法的文章就介紹到這了,更多相關Python檢查端口是否打開內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python編寫可視化界面的詳細教程(Python+PyCharm+PyQt)
最近開始學習Python,但只限于看理論,編幾行代碼,覺得沒有意思,就想能不能用Python編寫可視化的界面,遂查找了相關資料,發(fā)現(xiàn)了PyQt,所以本文介紹了Python+PyCharm+PyQt編寫可視化界面的詳細教程,需要的朋友可以參考下2024-07-07基于Python實現(xiàn)簡單學生管理系統(tǒng)
這篇文章主要為大家詳細介紹了基于Python實現(xiàn)簡單學生管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07python實現(xiàn)word/excel/ppt批量轉pdf的示例代碼
這篇文章主要為大家詳細介紹了如何利用python實現(xiàn)word、excel、ppt批量轉pdf文件,文中的示例代碼講解詳細,有需要的小伙伴可以參考下2023-09-09深入淺析Python 函數(shù)注解與匿名函數(shù)
這篇文章主要介紹了Python 函數(shù)注解與匿名函數(shù)的相關知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02計算機二級python學習教程(3) python語言基本數(shù)據(jù)類型
這篇文章主要為大家詳細介紹了計算機二級python學習教程的第3篇,python語言基本數(shù)據(jù)類型,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05