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