You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中识别数据包的目标与来源URL

在Python中判断数据包的目标与来源URL

首先得明确一点:你提供的这个数据包是TCP/IP层的原始数据包,里面只包含了源IP、目标IP、端口这些网络层/传输层的信息,并没有直接的URL——URL属于应用层(比如HTTP、HTTPS)的内容,只有当数据包承载了HTTP这类应用层协议的数据时,才能提取出URL。

下面分两种情况来解决你的问题:

一、从现有数据包提取基础网络端点信息

如果只是想从你给出的这类IP/TCP数据包中获取对应的网络地址和端口,可以用scapy这个常用的网络数据包处理库来解析:

1. 先安装scapy

pip install scapy

2. 解析你提供的数据包示例

我们可以把你给出的数据包信息构造为scapy的IP+TCP包,或者直接解析实际捕获的原始数据包:

from scapy.all import IP, TCP

# 构造你提供的数据包(实际场景中可以替换为捕获到的真实数据包)
ip_layer = IP(src="196.45.51.39", dst="10.0.9.137")
tcp_layer = TCP(sport=3128, dport=52662)
packet = ip_layer / tcp_layer

# 提取源/目标网络信息
src_ip = packet[IP].src
dst_ip = packet[IP].dst
src_port = packet[TCP].sport
dst_port = packet[TCP].dport

print(f"来源IP: {src_ip},来源端口: {src_port}")
print(f"目标IP: {dst_ip},目标端口: {dst_port}")

二、提取应用层的URL(以HTTP为例)

如果数据包是HTTP请求/响应,我们可以进一步解析应用层的 payload 来获取URL:

1. 捕获并解析HTTP数据包

from scapy.all import sniff, IP, TCP, Raw

def extract_http_url(packet):
    # 检查数据包是否包含TCP层和应用层原始数据
    if packet.haslayer(TCP) and packet.haslayer(Raw):
        payload = packet[Raw].load.decode(errors="ignore")
        # 判断是否为HTTP请求(匹配常见请求方法)
        if payload.startswith(("GET", "POST", "PUT", "DELETE")):
            # 从请求行中拆分出URL
            request_line = payload.split("\n")[0]
            method, url, _ = request_line.split(" ", 2)
            src_ip = packet[IP].src
            dst_ip = packet[IP].dst
            print(f"来源IP {src_ip} 请求的URL: {url}")
            print(f"请求的目标IP: {dst_ip}")

# 捕获指定网卡上的HTTP数据包(可替换iface为你的网卡名称,比如"eth0")
sniff(prn=extract_http_url, filter="tcp port 80", store=0)

2. 补充说明

  • 对于HTTPS(443端口)的数据包,因为内容是加密的,直接解析原始数据包无法获取URL,需要借助中间人代理(如mitmproxy)或者证书解密的方式处理。
  • 如果是其他应用层协议(比如FTP、DNS),需要对应解析协议的特定字段来获取类似资源路径的信息。

总结

你当前提供的数据包没有携带应用层数据,只能获取IP和端口信息;要获取URL,必须确保数据包包含HTTP等应用层协议的明文数据,再通过解析应用层内容提取。

内容的提问来源于stack exchange,提问作者sdq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:12:43