首先,针对标题进行解答: 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)