Linux에서 단일 명령을 스니핑하는 쉬운 명령 줄 도구가 있습니까?


11

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

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

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


1
정확히 당신이하고 싶은 것은 무엇입니까? 특정 명령이 실행되는지 확인 하시겠습니까? 네트워크 트래픽을 스니핑 하시겠습니까? '패킷 스니핑 명령'이라는 구절을 사용하는 것은 전혀 이해가되지 않습니다.
wzzrd

wzzrd, 확장 된 질문보기
Rory

답변:


10

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

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

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

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


Wireshark가 읽을 수있는 것을 출력하면 좋을 것입니다.
브래드 길버트

위에서 설명한 strace는 Solaris (및 기타 상용 Unices)에 정확합니다. Linux에서 strace는 운영 및 출력면에서 Solaris의 트러스 또는 HP-UX의 tusc와 유사한 시스템 호출 추적 프로그램입니다.
James F

1
나는 리눅스에서 strace를 설명했다.
David Pashley 2016 년

8

트레이스 덤프

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

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


1
이것이 바로 정답입니다.
h0tw1r3

4

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

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

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


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

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


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

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


lsof를 굉장합니다,하지만 난 오히려 거라고 볼 수 는 잡 / 전송 / 무엇을하고 있는지.
Rory

4

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

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

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

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


2

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

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


1

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

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

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

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

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

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

nettrace 프로그램 인터페이스

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


네 가능합니다. 그러나 간단하고 빠른 도구가 있다면 좋을 것입니다.
Rory

아마도이 간단한 도구를위한 시간일까요? 그것이 어려울 지, 아마도 vmnet mod가 좋은 출발점이 될 수 있는지 궁금합니다 (라이센스 문제가 있는지는 모르겠지만). 아마도 (해킹) 그냥 vmnet mod를 사용하십시오. 이런 질문에 자주 관심이 있다는 것을 알고 있습니다.
rev

1

당시에 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 페이지는 당신에게 구체적인 내용을 줄 것입니다


1

tcpdump 매뉴얼 페이지와 많은 웹 사이트는 필터에 대한 심층적 인 예를 제공하며 tcpdump 필터 표현식에 대한 온라인 저장소도 몇 개 있습니다. 프로그램이 생성하는 것 이상의 네트워크 트래픽 (소스, 대상, 포트, 프로토콜 등)에 대해 알고 있다고 가정하면 거의 모든 꿈을 꿀 수 있습니다.

서버 또는 헤드리스 박스에서 작업하는 경우 tcpdump가 덤프 파일을 작성한 다음 워크 스테이션의 Wireshark에서 파일을 열고 고급 필터링 및 그래픽 인터페이스를 얻을 수 있습니다.


어, tcpdump 명령으로 전환하여 트래픽을 생성하는 단일 응용 프로그램으로 제한합니까?
Milan Babuškov 2016 년

1

이 스크립트는 tshark 명령을 적절히 수정하여 원하는 작업을 수행 할 수 있습니다.

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

덤프 파일을 나중에 읽으십시오.

tshark -r dump

포트 8080을 캡처하고 있지만 포트 80에서 트래픽을 생성하고 있습니다. 이것은 당신이 의도 한 것을하지 않을 것입니다.
James F

제임스 : 프록시가 8080에 연결되어 스크립트를 실행했습니다. 이 게시물의 목적으로 80을 변경해야합니다.
Not Now

0

Dtrace가 이것을 허용해야하지만 아직 Linux로 만들 었는지 여부는 알 수 없습니다.

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