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

如何通过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的方案:

  1. 在远程机器上运行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()
  1. 用scp把抓包文件下载到本地:
scp user@remote_ip:/path/to/remote_local_packets.pcap ./
  1. 本地用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:57:43