Kee*_*ook 113 networking wireshark
我想检查由单个进程处理的网络流量,但简单的网络捕获不起作用,因为我正在处理如此繁忙的系统(同时发生许多其他流量)。有没有办法将一个tcpdump
或wireshark
捕获到单个特定进程的网络流量隔离?(使用netstat
是不够的。)
Cla*_*usi 168
要启动和监视新进程:
strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
Run Code Online (Sandbox Code Playgroud)
要监视具有已知 PID 的现有进程:
strace -p $PID -f -e trace=network -s 10000
Run Code Online (Sandbox Code Playgroud)
-f
用于“遵循新流程”-e
定义过滤器-s
将字符串的限制设置为超过 32-p
获取要附加到的进程 ID小智 63
我知道这个线程有点旧,但我认为这可能对你们中的一些人有所帮助:
如果您的内核允许,通过在隔离的网络命名空间中运行所述进程并在所述命名空间中使用wireshark(或其他标准网络工具),可以非常轻松地捕获单个进程的网络流量。
设置可能看起来有点复杂,但是一旦您理解并熟悉它,它就会让您的工作变得轻松很多。
为此:
创建一个测试网络命名空间:
ip netns add test
Run Code Online (Sandbox Code Playgroud)创建一对虚拟网络接口(veth-a 和 veth-b):
ip link add veth-a type veth peer name veth-b
Run Code Online (Sandbox Code Playgroud)更改 veth-a 接口的活动命名空间:
ip link set veth-a netns test
Run Code Online (Sandbox Code Playgroud)配置虚拟接口的 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
Run Code Online (Sandbox Code Playgroud)在 test 命名空间中配置路由:
ip netns exec test route add default gw 192.168.163.254 dev veth-a
Run Code Online (Sandbox Code Playgroud)激活 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>
Run Code Online (Sandbox Code Playgroud)
(如果您愿意,也可以使用 MASQUERADE 规则)
最后,您可以在新命名空间中运行要分析的进程,也可以运行wireshark:
ip netns exec test thebinarytotest
ip netns exec test wireshark
Run Code Online (Sandbox Code Playgroud)
您必须监视 veth-a 接口。
Oli*_*Oli 19
netstat -taucp | grep <pid or process name>
Run Code Online (Sandbox Code Playgroud)
这将显示应用程序正在建立的连接,包括正在使用的端口。
Cla*_*usi 14
只是一个想法:是否可以将您的应用程序绑定到不同的 IP 地址?如果是这样,您可以使用通常的嫌疑人(tcpdump等)
无法绑定到另一个 IP 地址的应用程序的工具:
http://freshmeat.net/projects/fixsrcip
fixsrcip
是一种用于将传出 TCP 和 UDP 客户端套接字 ( IPv4 ) 绑定到多宿主主机上的特定源 IP 地址的工具
http://freshmeat.net/projects/force_bind
force_bind
允许您强制绑定特定的 IP 和/或端口。它适用于 IPv4 和IPv6。
小智 11
I have come to a similar issue and I was able to sort it out based on this answer by ioerror, using NFLOG as described here:
# 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
Run Code Online (Sandbox Code Playgroud)
Then you can create run the process in question from a user account that doesn't do anything else - and voila, you have just isolated and captured traffic from a single process.
Just wanted to post back in case it helps anyone.
小智 6
您可以尝试 tracedump - http://mutrics.iitis.pl/tracedump
它完全符合您的要求,您可以为其提供进程 ID 或要运行的程序。
尝试在strace下运行您感兴趣的进程:
strace ping www.askubuntu.com
Run Code Online (Sandbox Code Playgroud)
它将为您提供有关您的流程正在执行的操作的一些非常详细的信息。由于进程可以在任何地方打开它想要的任何端口,因此使用预定义的过滤器您可能会错过一些东西。
另一种方法是在您的网络上使用精简的虚拟机或测试机,并将您的进程单独放置在其上。然后你可以使用Wireshark从那台机器上捕获所有内容。您将非常确定您捕获的流量是相关的。
小智 5
这是一个肮脏的黑客,但我建议使用给定 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
Run Code Online (Sandbox Code Playgroud)
对于该日志目标,可能还值得研究诸如“--log-tcp-sequence”、“--log-tcp-options”、“--log-ip-options”、“--log-uid”之类的内容. 尽管我怀疑这只会帮助您发布包含大量其他数据的 pcap。
如果您想标记数据包,然后某些标记的数据包将通过 netlink 套接字发送到您选择的进程,则 NFLOG 目标可能很有用。我想知道这对于使用 wireshark 和您作为特定用户运行的特定应用程序进行黑客攻击是否有用?
归档时间: |
|
查看次数: |
174032 次 |
最近记录: |