sock.connect_ex
使用socket模塊的connect_ex來(lái)判斷端口是否打開,如果返回值是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"錯(cuò)誤: {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來(lái)判斷端口是否打開,如果未發(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命令來(lái)判斷端口是否打開。
使用telnet命令:在大多數(shù)操作系統(tǒng)中,telnet命令可以用于測(cè)試端口是否開放。你可以在命令行中輸入"telnet <IP地址> <端口>",如果端口是開放的,則telnet會(huì)連接成功并返回一些信息。否則,它將返回一個(gè)錯(cuò)誤消息。
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命令是一個(gè)強(qiáng)大的工具,可以用于測(cè)試端口是否開放。你可以在命令行中輸入"nc -zv <IP地址> <端口>",如果端口是開放的,則nc會(huì)連接成功并返回一些信息。否則,它將返回一個(gè)錯(cuò)誤消息。
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命令可以用于測(cè)試網(wǎng)絡(luò)連接是否暢通,也可以用于檢查端口是否開放。在命令行中輸入"ping <IP地址> -n <端口>",如果端口是開放的,則ping會(huì)返回一些信息。否則,它將返回一個(gè)錯(cuò)誤消息。
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)閉的")
注意:如果目標(biāo)服務(wù)器禁用ping,就無(wú)法判斷出來(lái)了。
requests檢查http端口
requests庫(kù)是Python的一個(gè)HTTP庫(kù),可以用來(lái)發(fā)送所有類型的HTTP請(qǐng)求,包括GET、POST、PUT、DELETE等。它也可以用來(lái)處理cookies、會(huì)話、重定向等。
要檢查一個(gè)端口是否開放,我們通常會(huì)使用requests庫(kù)來(lái)嘗試向該端口發(fā)送HTTP請(qǐng)求,并查看是否能夠成功連接。以下是一個(gè)簡(jiǎn)單的示例:
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請(qǐng)求。如果請(qǐng)求成功,并且返回的狀態(tài)碼為200,則表示該端口是開放的。如果發(fā)生requests.exceptions.ConnectionError
異常,則表示該端口是關(guān)閉的。requests檢查端口方法僅適用于HTTP和HTTPS端口。
Scapy
Scapy是一個(gè)強(qiáng)大的Python庫(kù),用于創(chuàng)建、解析、發(fā)送、接收并解析網(wǎng)絡(luò)數(shù)據(jù)包。使用Scapy來(lái)檢查端口是否開放。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-631379.html
from scapy.all import *
def check_port(ip, port):
# 構(gòu)造一個(gè)ICMP數(shù)據(jù)包,并發(fā)送到目標(biāo)IP地址和端口
packet = IP(dst=ip) / ICMP() / Raw(load=str(port))
# 發(fā)送數(shù)據(jù)包并獲取響應(yīng)
response = sr1(packet, timeout=1)
# 檢查響應(yīng)是否為ICMP錯(cuò)誤類型
if response is None or response.type != ICMP.DEST_UNREACH:
print(f"端口 {port} 是開放的")
else:
print(f"端口 {port} 是關(guān)閉的")
# 測(cè)試函數(shù)
check_port('127.0.0.1', 80)
我們使用Scapy構(gòu)造了一個(gè)ICMP數(shù)據(jù)包,并將目標(biāo)端口作為負(fù)載包含在其中。然后,我們發(fā)送該數(shù)據(jù)包并等待響應(yīng)。如果響應(yīng)是ICMP錯(cuò)誤類型(目的地不可達(dá)),則表示端口是關(guān)閉的。否則,表示端口是開放的。這種方法只適用于ICMP端口掃描。對(duì)于其他類型的端口掃描(如TCP或UDP端口掃描),需要使用不同的協(xié)議和字段。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-631379.html
到了這里,關(guān)于Python檢查端口是否打開(七種方法)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!