首页 > 编程知识 正文

Python查看端口的方法

时间:2023-11-22 15:49:03 阅读:297314 作者:YIBC

首先,针对标题进行解答: Python提供了多种方法可以用来查看端口

一、使用socket模块

1、使用socket模块进行端口扫描:

import socket

def scan_port(host, port):
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        result = sock.connect_ex((host, port))
        if result == 0:
            print("Port {} is open".format(port))
        else:
            print("Port {} is closed".format(port))
        sock.close()
    except socket.error:
        print("Couldn't connect to server")

scan_port("127.0.0.1", 80)

2、使用socket模块进行端口监听:

import socket

def listen_port(port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(("127.0.0.1", port))
    sock.listen(1)
    print("Listening on port {}".format(port))
    conn, addr = sock.accept()
    print("Connection established from {}".format(addr))
    data = conn.recv(1024)
    print(data)
    conn.close()
    sock.close()

listen_port(8080)

二、使用python-nmap模块

1、使用python-nmap模块进行端口扫描:

import nmap

def scan_port(host, port):
    nm = nmap.PortScanner()
    result = nm.scan(host, str(port))
    if result['scan'][host]['tcp'][port]['state'] == 'open':
        print("Port {} is open".format(port))
    else:
        print("Port {} is closed".format(port))

scan_port("127.0.0.1", 80)

2、使用python-nmap模块进行服务版本探测:

import nmap

def service_banner(host, port):
    nm = nmap.PortScanner()
    result = nm.scan(host, str(port))
    if 'tcp' in result['scan'][host]:
        if 'product' in result['scan'][host]['tcp'][port]:
            print("Service running on port {}: {}".format(port, result['scan'][host]['tcp'][port]['product']))
        else:
            print("No service running on port {}".format(port))
    else:
        print("Port {} is closed".format(port))

service_banner("127.0.0.1", 22)

三、使用Scapy模块

1、使用Scapy模块进行端口扫描:

import sys
from scapy.all import *

def scan_port(host, port):
    src_port = RandShort()
    p = IP(dst=host)/TCP(sport=src_port, dport=port, flags='S')
    resp = sr1(p, timeout=10)
    if resp is None:
        print("Port {} is filtered".format(port))
    elif resp.haslayer(TCP):
        if resp.getlayer(TCP).flags == 0x12:
            print("Port {} is open".format(port))
        elif resp.getlayer(TCP).flags == 0x14:
            print("Port {} is closed".format(port))
    elif resp.haslayer(ICMP):
        if int(resp.getlayer(ICMP).type) == 3 and int(resp.getlayer(ICMP).code) in [1, 2, 3, 9, 10, 13]:
            print("Port {} is filtered".format(port))
    else:
        print("Port {} is closed".format(port))

scan_port("127.0.0.1", 80)

2、使用Scapy模块进行端口监听:

import sys
from scapy.all import *

def listen_port(port):
    def handle_packet(packet):
        if packet.haslayer(TCP) and packet[TCP].dport == port:
            print(packet[Raw].load)

    sniff(filter="tcp port {}".format(port), prn=handle_packet)

listen_port(8080)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。