ここの指示に従って、単一のプロセスからすべてのネットワークトラフィックを分離してtcpdumpしようとしています。プログラムでパケットを表示する方法):
$ sudo bash
# mkdir /sys/fs/cgroup/net_cls
# mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
# mkdir /sys/fs/cgroup/net_cls/tcpdump
# pidof my_program > /sys/fs/cgroup/net_cls/tcpdump/tasks
# echo 0x100001 > /sys/fs/cgroup/net_cls/tcpdump/net_cls.classid
# iptables -A INPUT -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
# iptables -A OUTPUT -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
# tcpdump -i nflog:123
ただし、着信トラフィックではなくアウトバウンドトラフィックのみが表示されるため、パフォーマンスが低下します。
# iptables-save -c | grep cgroup
[0:0] -A INPUT -m cgroup --cgroup 1048577 -j NFLOG --nflog-group 123
[4242:623034] -A OUTPUT -m cgroup --cgroup 1048577 -j NFLOG --nflog-group 123
アウトバウンドトラフィックにのみ関心を持つフロー制御(tc)で使用するように意図されているので、これは意図的に設計されているのですか、それとも欠陥ですか?
その質問に対する答えに関係なく、特定のプロセス(またはプロセスのセット)に入って来るすべてのパケットを記録するより良い方法はありますか?
PS:コマンドはtcpdump -i nflog:123 not src host x.x.x.x
言い続けます
tcpdump: NFLOG link-layer type filtering not implemented
リンク層のフィルタリングが不要であっても。それは問題ですか?
よろしくお願いします!