python代码实现端口扫描和端口嗅探功能
时间: 2024-10-14 18:05:07 浏览: 53
Python 中可以使用第三方库如 `socket` 和 `scapy` 来实现简单的端口扫描和端口嗅探。
**端口扫描**(也称为服务探测):
```python
import socket
def scan_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:
print(f"Port {port} is open on {ip}")
else:
print(f"Port {port} is closed or not responding")
except Exception as e:
print(f"Error scanning port {port}: {e}")
finally:
sock.close()
# 使用示例
scan_port('192.168.1.1', 80)
```
这里我们创建一个套接字,尝试连接目标主机和指定端口,如果连接成功返回0,表示端口开放;失败则表明端口关闭或未响应。
**端口嗅探**(网络数据包抓取):
```python
from scapy.all import *
def sniff_ports(interface, ports, timeout=5):
pkts = sniff(iface=interface, filter="host " + interface + " and (" + " or ".join("port {}".format(port) for port in ports) + ")", timeout=timeout)
return pkts
# 示例,监听eth0接口并捕获80、443端口的数据包
packets = sniff_ports('eth0', [80, 443])
for packet in packets:
print(packet.summary())
```
`scapy` 库提供高级的网络协议分析能力,`sniff()` 函数用于抓取网络流量。在这个例子中,它会监听指定接口和端口列表,并打印出抓到的每个数据包的简要信息。
**注意:**
- 端口扫描需要权限并且在某些场景下可能被视为非法操作,请确保你有合法的理由和权限进行此类操作。
- 在生产环境中,通常不会直接使用上述代码,而是通过更专业的安全审计工具来进行。
阅读全文