AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 11709
Accepted
Kees Cook
Kees Cook
Asked: 2010-11-06 22:56:26 +0800 CST2010-11-06 22:56:26 +0800 CST 2010-11-06 22:56:26 +0800 CST

如何捕获单个进程的网络流量?

  • 772

我想检查由单个进程处理的网络流量,但简单的网络捕获不起作用,因为我正在处理如此繁忙的系统(同时发生许多其他流量)。有没有办法隔离tcpdump或wireshark捕获单个特定进程的网络流量?(使用netstat不足。)

networking wireshark
  • 15 15 个回答
  • 185361 Views

15 个回答

  • Voted
  1. Clausi
    2010-11-11T03:04:37+08:002010-11-11T03:04:37+08:00

    启动和监控新进程:

    strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
    

    使用已知 PID 监控现有进程:

    strace -p $PID -f -e trace=network -s 10000
    
    • -f用于“遵循新流程”
    • -e定义一个过滤器
    • -s将字符串的限制设置为超过 32
    • -p获取要附加到的进程 ID
    • 176
  2. felahdab
    2014-07-20T03:39:43+08:002014-07-20T03:39:43+08:00

    我知道这个线程有点旧,但我认为这可能会对你们中的一些人有所帮助:

    如果你的内核允许,捕获单个进程的网络流量很容易通过在隔离的网络命名空间中运行所述进程并在所述命名空间中使用wireshark(或其他标准网络工具)来完成。

    设置可能看起来有点复杂,但是一旦您理解并熟悉它,它将大大简化您的工作。

    为此:

    • 创建一个测试网络命名空间:

      ip netns add test
      
    • 创建一对虚拟网络接口(veth-a 和 veth-b):

      ip link add veth-a type veth peer name veth-b
      
    • 更改 veth-a 接口的活动命名空间:

      ip link set veth-a netns test
      
    • 配置虚拟接口的 IP 地址:

      ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
      ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
      
    • 在 test 命名空间中配置路由:

      ip netns exec test route add default gw 192.168.163.254 dev veth-a
      
    • 激活 ip_forward 并建立 NAT 规则来转发来自您创建的命名空间的流量(您必须调整网络接口和 SNAT ip 地址):

      echo 1 > /proc/sys/net/ipv4/ip_forward
      iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
      

      (如果您愿意,也可以使用 MASQUERADE 规则)

    • 最后,您可以在新的命名空间中运行您要分析的进程,也可以使用wireshark:

      ip netns exec test thebinarytotest
      ip netns exec test wireshark
      

      您必须监视 veth-a 接口。

    • 70
  3. Best Answer
    OpenNingia
    2010-11-07T01:53:52+08:002010-11-07T01:53:52+08:00

    确实有一种方法,使用Wireshark过滤器。但是您不能直接按进程名称或 PID 过滤(因为它们不是网络数量)。

    您应该首先弄清楚您的进程使用的协议和端口(上一条评论中的netstat命令效果很好)。

    然后使用 Wireshark 将入站(或出站)端口与您刚刚检索到的端口一起过滤。这应该隔离进程的传入和传出流量。

    • 22
  4. Oli
    2010-11-07T01:15:02+08:002010-11-07T01:15:02+08:00
    netstat -taucp | grep <pid or process name>
    

    这将显示应用程序正在建立的连接,包括正在使用的端口。

    • 21
  5. Clausi
    2010-11-11T04:33:51+08:002010-11-11T04:33:51+08:00

    只是一个想法:是否可以将您的应用程序绑定到不同的 IP 地址?如果是这样,您可以使用通常的嫌疑人(tcpdump等)

    适用于无法绑定到另一个 IP 地址的应用程序的工具:

    http://freshmeat.net/projects/fixsrcip

    fixsrcip是一种将传出 TCP 和 UDP 客户端套接字 ( IPv4 ) 绑定到多宿主主机上的特定源 IP 地址的工具

    http://freshmeat.net/projects/force_bind

    force_bind允许您强制绑定特定的 IP 和/或端口。它适用于 IPv4 和IPv6。

    • 15
  6. szymon
    2014-04-07T06:49:01+08:002014-04-07T06:49:01+08:00

    我遇到了一个类似的问题,我能够根据 ioerror 的这个答案,使用这里描述的 NFLOG 来解决它:

    # iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
    # iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
    # iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
    # dumpcap -i nflog:30 -w uid-1000.pcap
    

    然后,您可以从不执行任何其他操作的用户帐户创建运行有问题的进程 - 瞧,您刚刚从单个进程中隔离并捕获了流量。

    只是想回帖以防它对任何人有帮助。

    • 13
  7. Jonas Danielsson
    2016-07-16T03:24:33+08:002016-07-16T03:24:33+08:00

    我编写了一个 C 应用程序,该应用程序执行 felahdab 上述出色答案中所描述的功能!

    见这里:nsntrace github repo

    • 10
  8. pjf
    2014-04-02T04:51:03+08:002014-04-02T04:51:03+08:00

    您可以尝试 tracedump - http://mutrics.iitis.pl/tracedump

    它完全符合您的要求,您可以给它一个进程 ID 或一个要运行的程序。

    • 6
  9. The Unix Janitor
    2010-11-11T01:54:36+08:002010-11-11T01:54:36+08:00

    尝试在strace下运行您感兴趣的进程:

    strace ping www.askubuntu.com
    

    它将为您提供一些有关您的流程正在做什么的非常详细的信息。由于一个进程可以在任何地方打开它想要的任何端口,使用预定义的过滤器你可能会错过一些东西。

    另一种方法是在您的网络上使用精简的虚拟机或测试机,并将您的进程单独放置在其上。然后你可以使用Wireshark从那台机器上捕获所有内容。您将非常确定您捕获的流量是相关的。

    • 5
  10. ioerror
    2010-12-13T01:50:56+08:002010-12-13T01:50:56+08:00

    这是一个肮脏的黑客,但我建议为给定的 UID 使用 iptables 进行转移或日志目标。例如:

    iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG 
    iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG 
    

    对于该日志目标,可能还值得研究诸如“--log-tcp-sequence”、“--log-tcp-options”、“--log-ip-options”、“--log-uid”之类的东西. 虽然我怀疑这只会帮助您发布包含大量其他数据的 pcap。

    如果您想标记数据包,然后某些标记的数据包将通过 netlink 套接字发送到您选择的进程,则 NFLOG 目标可能很有用。我想知道这对于使用wireshark破解某些东西以及您作为特定用户运行的特定应用程序是否有用?

    • 5

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve