명령의 네트워킹 활동을 추적하는 방법은 무엇입니까?


13

명령의 네트워킹 활동을 추적하고 싶습니다 .tcpdump 및 strace를 성공하지 못했습니다.

예를 들어, 패키지를 설치하거나 일부 사이트에 도달하려는 명령을 사용하는 경우 해당 네트워킹 활동 (연결하려는 사이트)을보고 싶습니다.

tcpdump를 사용 하여이 작업을 수행 할 수 있다고 생각합니다. 시도했지만 시스템의 모든 네트워킹 활동을 추적하고 있습니다. 여러 네트워킹 관련 명령을 실행하고 특정 명령 네트워킹 활동 만 추적하려고한다면 정확한 솔루션을 찾기가 어렵습니다.

그렇게 할 방법이 있습니까?

최신 정보:

네트워크 인터페이스에서 발생하는 모든 것을 추적하고 싶지 않습니다. 명령 (예 : #yum install -y vim) 네트워킹 활동을 추적하고 싶습니다. 도달하려는 사이트 등


1
애플리케이션을 네트워크 네임 스페이스에 넣은 다음 tcpdump / wireshark를 사용하십시오. 예를 들어 여기를 참조 하십시오 .
dirkt

답변:


17

단순성을위한 netstat

netstatPID 또는 프로세스 이름 사용 및 grepping :

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

watch동적 업데이트에 사용할 수 있습니다 .

watch 'netstat -np --inet | grep "thunderbird"'

와:

  • -n: 기호 호스트, 포트 또는 사용자 이름을 판별하는 대신 숫자 주소 표시
  • -p: 각 소켓이 속한 프로그램의 PID와 이름을 보여줍니다.
  • --inet: raw, udp 및 tcp 프로토콜 소켓 만 표시합니다.

자세한 표시

당신은 당신이 시도했다 strace도구를, 그러나 당신은 옵션을 시도 않았다 trace=network? 출력이 매우 장황 할 수 있으므로 약간의 grepping이 필요할 수 있습니다. "sin_addr"을 그 리핑하여 시작할 수 있습니다.

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

또는 이미 실행중인 프로세스의 경우 PID를 사용하십시오.

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

+1 netstat은 가장 단순하고 가장 단순한 솔루션 인 IMHO입니다.
dr01

@ Gohu 나는 dnf에 대해서도 똑같이했다. 그러나 운이 없다. dnf를 사용하여 일부 패키지를 설치하려고 시도한 후 dnf 프로세스가 실행 중임을 확인했습니다 (프로세스 이름 : top 및 ps aux 명령에 따라 dnf). 슬프게도 netstat -np --inet | grep "dnf".
Buvanesh Kumar

strace의 경우 +1 내 문제가 해결되었습니다. IP 주소를 얻을 수 있습니다. 답변 주셔서 감사합니다 :) @Gohu. 네트워크를 통해 도달하는 모든 IP 주소 (예 : 라우터 IP 및 기타 IP)를 제공하는 것 같습니다. 알고 있다면 대상 IP 만 추적 할 수 있습니까?
Buvanesh Kumar

다음을 사용하여 syscall을 strace유지 connect하고 dns요청을 제거 (포트 53) | grep connect | grep -v 'sin_port=htons(53)'
만하면

strace의 추적 네트워크 옵션에 +1
phreed


5

sysdig 네트워크 활동을 포함하여 이에 국한되지 않고 시스템에서 실행중인 커널 또는 여러 명령의 모든 활동을 모니터링 할 수 있습니다.

출력이 클 수 있으므로 필터를 빌드해야합니다. 가장 기본적인 필터의 기본 페이지는 이해하기 쉽습니다.

또한 에서처럼 응용 프로그램 래퍼로 사용되지 않는 이점이 strace있으며 매우 강력 할 수 있습니다.

에서 Sysdig 예

네트워킹

네트워크 대역폭 사용량 측면에서 주요 프로세스 확인

sysdig -c topprocs_net 

호스트 192.168.0.1과 교환 된 네트워크 데이터 표시

이진으로 :

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

ASCII로 :

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

상위 로컬 서버 포트를 참조하십시오.

설정된 연결 측면에서 :

sysdig -c fdcount_by fd.sport "evt.type=accept"   

총 바이트의 관점에서 :

sysdig -c fdbytes_by fd.sport 

상위 클라이언트 IP보기

확립 된 연결 측면에서

sysdig -c fdcount_by fd.cip "evt.type=accept"   

총 바이트 수

sysdig -c fdbytes_by fd.cip 

Apache에서 제공하지 않는 모든 수신 연결을 나열하십시오.

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

1

wireshark를 사용하여 네트워크 인터페이스의 모든 입력 및 출력 트래픽을 스니핑 할 수 있습니다. GUI가없는 옵션이 필요한 경우 tshark를 사용할 수 있습니다.

두 옵션을 모두 사용하면 모든 네트워크 트래픽을 확인하고 저장하여 나중에 설정된 모든 연결을 분석 할 수 있습니다.


1
앞에서 언급했듯이 네트워킹 관련 명령을 여러 개 실행하면 어떤 명령이 어떤 사이트를 가져 오는지 어떻게 알 수 있습니까?
Buvanesh Kumar

이것은 더 일반적인 대답입니다. 이미 네트워킹 인터페이스의 네트워킹 활동을 추적 할 수 있음을 알고 있습니다. :). 특정 명령 네트워크 정적을 추적하려고합니다.
Buvanesh Kumar

명령이 사용하는 포트를 알고 있으면 스 니프를 필터링하여 원하는 명령으로 제한 할 수 있습니다. 그러나 이것은 당신의 상황에서 불가능할 수도 있습니다.
Ricard Molins
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.