Linux에서 단일 명령을 스니핑하는 쉬운 명령 줄 도구가 있습니까? 수 있도록. 단일 네트워크 인터페이스의

Linux에서 단일 명령을 스니핑하는 패킷을위한 단일 명령 줄 도구가 있다면 좋겠습니다. 같은 sniff dumpfile command방금 터미널에서 패킷 냄새에 원하는 명령을 실행하고 다른 곳에서 패킷의 덤프를 얻을 수 있도록.

단일 네트워크 인터페이스의 모든 TCP 트래픽이 아니라 입력 한 단일 명령의 네트워크 트래픽 만 덤프 / 저장 / 보려고합니다. 따라서 컴퓨터에 로그인 한 상태에서 백그라운드에서 IRC를 실행하고 있었는데 sniff somefile wget http://www.google.comwget 명령이 http://www.google.com 을 다운로드하기 위해 수행 한 모든 네트워크 트래픽을보고 싶습니다 . 나는 ‘somefile’이 IRC 네트워크 트래픽을 혼란스럽게하는 것을 원하지 않습니다.

다른 명령을 받아들이고 다른 작업을 수행하는 많은 Linux / unix 명령이 있습니다. 에서 sudo(수퍼 유저로 실행), nice변화의 좋은 수준 trickle(명령의 대역폭을 제한)



답변

내가 아는 것은 없지만 이론적으로 비슷한 것을 얻는 것이 어렵지 않아야합니다. Strace는 네트워킹 syscall을 가로채는 데 사용될 수 있습니다.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

커널과 프로세스간에 전송 된 데이터에 대한 정보가 제공됩니다. strace의 출력은 정확히 원하는 것이 아닙니다. 그러나 strace는 ptrace syscall을 사용하여 시스템 호출을 인터셉트합니다. 좀 더 유용하게 데이터를 출력하는 프로그램을 작성할 수 있습니다.

또는 유용한 유용한 소켓을 가로 채고 syscall을 바인드하고 청취 할 수도 있습니다. 새 소켓이 열릴 때마다 이러한 호출 및 libpcap에 ptrace를 사용하여 캡처 필터를 동적으로 변경하는 작은 프로그램을 작성할 수 있습니다.


답변

트레이스 덤프

Tracedump는 단일 Linux 프로세스의 모든 TCP 및 UDP 패킷을 캡처하는 단일 응용 프로그램 IP 패킷 스니퍼입니다.

여기에서 다운로드 및 설명 : http://mutrics.iitis.pl/tracedump


답변

Wireshark를 사용해보십시오-명령은 tshark

  • tshark를 사용하면 인터페이스에서 캡처 된 트래픽의 필터를 선택할 수 있습니다
  • debian lsof 와 같은 다른 유틸리티 를 사용하여 관심있는 응용 프로그램에서 수행하는 통신의 종류를 식별하십시오.

아니면 정말로 LSOF를 원하십니까?


프로세스와 관련된 모든 통신을 동적으로 필터링하는 도구가 있다고 생각하지 않습니다. 그러나 도구와 같은 도구를 사용하여 프로세스 통신을 추적 할 수 lsof있으며 시스템에서 실행중인 다른 모든 트래픽과 해당 프로세스의 통신을 분리 할 수있는 좋은 필터가 있으면 올바른 캡처를 얻을 수 있습니다.

예를 들어 wget일반적으로 대상 IP 주소는 다른 프로세스 관련 트래픽과 다릅니다. skype대상 포트 범위 와 같은 것을 취하더라도 일반적으로 인스턴스에 대해 고정됩니다.


이것은 불확실성 원리와 약간 같습니다. 당신은 일반적으로 알 수있는 (흐름의 식별 그룹 필터링 스니퍼와) 통신 경로의 집합을 통해 것입니다, 또는 경우 다른 통신 링크 (lsof를 함께) 만들어지고있다.

응용 프로그램에 대해 두 가지를 모두 수행 할 수 있는지 알고 싶습니다. 나는 그것이 가능해야한다고 생각합니다. 그러나 아직 어떤 도구도 보지 못했습니다.


답변

필터 표현식 사용 방법을 배웁니다.

이것이 당신이 요구하는 멋진 추적 작업을 수행하지는 않습니다.

캡처에서 “IRC와 같은 혼란스러운 것들”을 거의 모두 제거 할 수 있습니다.

또한 향후 빠른 참조를 위해 필터 구문을 아는 것이 매우 유용합니다.


답변

특히 Firefox 용 Firebug 플러그인과 같은 웹 브라우저 / 웹 페이지의 경우 원하는 정보를 제공 할 수 있습니다. http://getfirebug.com/net.html

보다 일반적인 응용 프로그램의 경우 netstat를 사용하여 응용 프로그램에서 사용하는 포트를 식별 한 다음 해당 트래픽 만 캡처하기 위해 필터로 Wireshark / tshark / dtrace를 사용해야합니다. 당신이 찾고있는 한 줄의 대답이 아닙니다 …


답변

한 가지 아이디어, VMWare를 사용해보십시오

-setup VM을
-configure이 VM 특정 인터페이스를 사용하는
호스트에서 해당 인터페이스에 -sniff를 (그 중간 공격 사람 등)

해당 VM에서 실행중인 네트워크 응용 프로그램을 분리하면 답이있을 수 있습니다.

더 이상적인 해결책은 VMWare가 대화 할 인터페이스를 선택하는 방법을 지정하는 방식으로 VMWare가하는 일을하는 것입니다. 마법은 사용하는 커널 모듈,이 경우 아마도 vmnet 커널 모듈에서 비롯된 것 같습니다.

내 지식에 응용 프로그램은 그들이 말하는 인터페이스를 알지 못하며 이것이 의도적으로 설계된 것이라고 생각합니다. 그들은 그런 것들에 대해 걱정할 필요가 없습니다.

또한,
아마도 프로그램이 이미 존재할 수도 있습니다. 그러나 하나가 작성되면 nettrace라고 할 수 있으며 사용법은 다음과 같습니다.

nettrace 프로그램 인터페이스

그런 다음 사용하는 인터페이스를 스니핑하고 실제 인터페이스에 경로를 자동으로 추가합니다


답변

당시에 Google에 연결하려고하는 유일한 사람이라고 가정하면 다음과 같은 방법으로 트릭을 수행해야한다고 생각합니다.

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

상자에서 Google에 연결을 시도하는 유일한 연결이 아닌 경우 연결중인 IP / 포트를 식별 할 수있는 경우 src 포트 / src ip를 지정할 수도 있습니다.

사용하는 클라이언트에서 포트를 지정할 수 없으면 src 포트를 식별하는 것이 문제가 될 수 있습니다. wget으로 할 수 있는지 확실하지 않습니다.

src 및 dst 포트를 모두 지정할 수 있다고 생각 netcat하므로 실제로 관심이있는 Google 인 경우 netcat을 통해 GET을 수동으로 수행 할 수 있습니다.

물론 man 페이지는 당신에게 구체적인 내용을 줄 것입니다