단일 프로세스로 처리되는 네트워크 트래픽을 조사하고 싶지만 바쁜 시스템 (많은 다른 트래픽이 동시에 발생)을 처리하기 때문에 간단한 네트워크 캡처가 작동하지 않습니다. 단일 특정 프로세스의 네트워킹 트래픽 을 격리 tcpdump
하거나 wireshark
캡처하는 방법이 있습니까? (사용 netstat
이 충분하지 않습니다.)
답변
실제로 Wireshark 필터를 사용하는 방법이 있습니다. 그러나 네트워크 이름이 아니기 때문에 프로세스 이름 또는 PID로 직접 필터링 할 수 없습니다.
먼저 프로세스에서 사용하는 프로토콜과 포트를 파악해야합니다 ( 이전 설명 의 netstat 명령이 잘 작동 함).
그런 다음 Wireshark를 사용하여 방금 검색 한 포트로 인바운드 (또는 아웃 바운드) 포트를 필터링하십시오. 프로세스의 들어오는 트래픽과 나가는 트래픽을 분리해야합니다.
답변
새 프로세스를 시작하고 모니터링하려면
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를 첨부합니다.
답변
이 스레드가 약간 오래되었다는 것을 알고 있지만 이것이 일부 사용자에게 도움이 될 수 있다고 생각합니다.
커널이 허용하는 경우 단일 프로세스의 네트워크 트래픽 캡처는 격리 된 네트워크 네임 스페이스에서 해당 프로세스를 실행하고 해당 네임 스페이스에서 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
-
테스트 네임 스페이스에서 라우팅을 구성하십시오.
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 인터페이스를 모니터링해야합니다.
답변
netstat -taucp | grep <pid or process name>
사용중인 포트를 포함하여 응용 프로그램이 연결을 보여줍니다.
답변
아이디어 : 다른 IP 주소에 응용 프로그램을 바인딩 할 수 있습니까? 그렇다면 일반적인 용의자 ( tcpdump 등)를 사용할 수 있습니다
다른 IP 주소에 바인딩 할 수없는 응용 프로그램 도구 :
http://freshmeat.net/projects/fixsrcip
fixsrcip
발신 TCP 및 UDP 클라이언트 소켓 ( IPv4 )을 멀티 홈 호스트의 특정 소스 IP 주소에 바인딩하는 도구입니다.
http://freshmeat.net/projects/force_bind
force_bind
특정 IP 및 / 또는 포트에서 강제로 바인딩 할 수 있습니다. IPv4 및 IPv6 모두에서 작동 합니다 .
답변
비슷한 문제가 발생했으며 여기에 설명 된대로 NFLOG 를 사용하여 ioerror 의이 답변을 기반으로 정렬 할 수있었습니다 .
# 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
그런 다음 다른 작업을 수행하지 않는 사용자 계정에서 문제의 프로세스를 실행할 수 있습니다. 단, 단일 프로세스에서 트래픽을 격리하고 캡처했습니다.
누군가를 돕기 위해 다시 게시하고 싶었습니다.