단일 애플리케이션의 네트워크 트래픽 덤프 (strace-like)


11

나는 응용 프로그램에 의해 생성 된 네트워크 데이터의 pcap을 덤프하는 방법을 찾고 있는데, 비슷한 방식으로 stracesyscall을 덤프합니다. 예 :

net-strace somecommand -args

somecommand네트워크를 통해 무언가를 수행하고 net-strace해당 앱에서 생성 된 모든 트래픽 (+ 회신 및 관련 트래픽)의 pcap 덤프를 저장합니다.

이것이 달성 될 수 있습니까?


문제는 응용 프로그램이 패킷을 보내지 않지만 (ping과 같은 원시 소켓을 사용하는 것을 제외하고) 커널이 패킷을 보내고 (관련 패킷을 받도록) 네트워킹 API를 사용한다는 것입니다.
— Stéphane Chazelas

예, 그러나 프록시를 통해 모든 애플리케이션 데이터를 실행하는 애플리케이션 (예 : proxychains-proxychains.sourceforge.net )이 있습니다. 그들이하는 방법을 모르지만, 그것을 잡아서 프록시를 통해 보낼 수 있습니다. pcap을 덤프 할 수있는 간단한 프록시 (로컬로 실행)가 있으면 proxychains + proxy 콤보를 사용하여 덤프를 얻을 수 있습니다.
— gesti

패킷보다 API를 하이재킹 할 가능성이 높습니다 (LD_PRELOAD 사용). 그러나 일부 setsockopt (SO_MARK)를 응용 프로그램에 주입하고 netfilter를 사용하여 패킷을 ulog에 기록 할 수 있습니다.
— Stéphane Chazelas

3
응용 프로그램을위한 새로운 네트워크 네임 스페이스를 생성하고 모든 트래픽을 캡처하여 일부 사용 사례에도 적합한 접근 방식이있을 수 있습니다.
— Stéphane Chazelas

답변:


3

strace 자체를 사용하는 것은 어떻습니까?

strace -f -e trace=network -o output_file -s 10000 somecommand -args

제공 한 명령 줄은 DNS 요청 만 표시하는 것으로 나타납니다. strace의 -e옵션은 실제로 실제로 원하는 것을 선택하지 않습니다.
— Robin Green

2

다른 방법으로 애플리케이션 생성 트래픽을 덤프 할 수 있습니다.

응용 프로그램이 사용중인 포트를 알고 있으면 해당 포트에 대한 특정 필터링 규칙을 사용하여 tcpdump 또는 wireshark 를 실행할 수 있습니다 .

이것이 옵션이 아닌 경우 프로세스 소유자와 일치 하는 iptables 규칙을 사용하여 애플리케이션 패킷을 표시 할 수 있습니다 . 프로세스를 완전히 분리하려면 새 사용자 계정을 만들어야합니다. 그런 다음 규칙과 만 일치하는 트래픽을 캡처 할 수 있습니다.

이 관련 주제에 대한 자세한 정보는 /ubuntu/11709/how-can-i-capture-network-traffic-of-a-single-process에 있습니다.

또한 이전 주제에서 설명한 대로이 프로그램 tracedump가 흥미로울 것 입니다. http://mutrics.iitis.pl/tracedump

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.