如何通过pyshark抓取远程计算机本地网站的数据包?
如何抓取远程计算机上本地部署网站的数据包?
问题描述
我想通过Pyshark抓取远程计算机上本地部署网站的数据包,但当前代码只能抓到互联网数据包,达不到需求。以下是我的代码:
import pyshark def print_live_dns(): capture = pyshark.LiveCapture("wlan0") for packet in capture: # print(packet) with open('packets.txt', 'a') as f: f.write(str(packet)) if "DNS" in packet and not packet.dns.flags_response.int_value: print(packet.dns.qry_name) if __name__ == "__main__": print_live_dns()
我可以使用Pyshark、Scapy、Nmap等工具,请问该怎么调整才能实现需求?
解决方案
你当前的问题核心是没有针对性过滤目标流量,且如果要抓远程机器的本地回环流量,直接在本地抓不到。下面分几种场景给你可行的方案:
场景1:抓局域网内访问远程网站的流量(网站绑定远程机器的局域网IP)
如果远程网站绑定的是它的局域网IP(比如192.168.1.100),且你和它在同一局域网,那可以直接在本地调整Pyshark的捕获规则:
import pyshark def capture_remote_website_traffic(): # 替换成远程机器的局域网IP和网站端口 target_ip = "192.168.1.100" target_port = 80 # 如果是HTTPS就用443,自定义端口改对应数值 # 捕获过滤规则:只抓取目标IP和端口的双向流量 capture_filter = f"host {target_ip} and port {target_port}" # 监听本地正确的网络接口(比如wlan0/eth0,根据你的网络环境调整) capture = pyshark.LiveCapture(interface="wlan0", capture_filter=capture_filter) for packet in capture: with open('remote_website_packets.txt', 'a') as f: f.write(str(packet) + "\n\n") # 按需解析HTTP/HTTPS内容 if "HTTP" in packet: print(f"👉 {packet.http.request_method} {packet.http.request_uri}") if __name__ == "__main__": # 注意:抓包需要权限,运行时加sudo capture_remote_website_traffic()
场景2:抓远程机器自身的回环流量(网站绑定127.0.0.1)
如果网站只绑定了远程机器的回环地址(127.0.0.1),这种流量不会出现在局域网里,必须在远程机器上抓包,再把数据导回本地分析。这里用Scapy+SSH的方案:
- 在远程机器上运行Scapy抓包脚本:
from scapy.all import sniff, wrpcap def capture_local_loopback_traffic(): # 过滤规则:回环地址+网站端口 filter_rule = "host 127.0.0.1 and port 8080" # 抓取100个数据包,或者用stop_filter自定义停止条件 packets = sniff(filter=filter_rule, count=100) # 保存为pcap文件 wrpcap("remote_local_packets.pcap", packets) if __name__ == "__main__": capture_local_loopback_traffic()
- 用
scp把抓包文件下载到本地:
scp user@remote_ip:/path/to/remote_local_packets.pcap ./
- 本地用Pyshark或Scapy分析:
import pyshark def analyze_pcap(): capture = pyshark.FileCapture("remote_local_packets.pcap") for packet in capture: if "HTTP" in packet: print(f"请求路径:{packet.http.request_uri}") if __name__ == "__main__": analyze_pcap()
场景3:用tcpdump快速抓包(更轻量)
如果不想用Python脚本,也可以在远程机器上用tcpdump直接抓包:
# 远程机器执行,抓回环地址80端口的流量,保存为pcap sudo tcpdump host 127.0.0.1 and port 80 -w remote_local.pcap
之后下载文件到本地,用Wireshark或Pyshark分析即可。
关键提醒
- 所有抓包操作都需要管理员权限,运行脚本或命令时记得加
sudo。 - 如果目标网站用了HTTPS,抓取到的数据包会是加密的,需要额外配置SSL密钥才能解析明文内容。
- 确保捕获规则的IP和端口与目标网站完全匹配,避免抓取无关流量。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

