단일 애플리케이션의 네트워크 트래픽 덤프 (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.