프로세스 및 도메인 이름별로 네트워크 트래픽을 기록할 수 있는 프로그램이 있습니까?

프로세스 및 도메인 이름별로 네트워크 트래픽을 기록할 수 있는 프로그램이 있습니까?

일정 기간 동안 어떤 프로세스가 어떤 웹사이트와 통신하는지 파악하고 싶습니다. 내가 찾은 모든 프로그램(예: ss)은 현재 열려 있는 연결을 나열한 다음 종료됩니다.

실제로 내가 원하는 것은 Wireshark와 비슷하지만 프로세스 이름을 기록하는 것입니다.

정말 그런 프로그램이 없을까요?

답변1

최신 커널(4.9 이상이 바람직하지만 일부 기능은 4.2에서도 작동함)이 있는 경우 새 커널을 활용할 수 있습니다.이 도구를 사용하면 connect()커널의 모든 TCP 호출을 가로채서 프로세스 ID, 원격 IP 주소 및 포트를 표시할 수 있습니다.

이는 폴링하지 않으므로 임시 연결을 놓치지 않습니다. 브렌든 그레그에서블로그2016년의 일반적인 생산량은

# tcpconnect
PID    COMM    IP SADDR            DADDR            DPORT
1479   telnet  4  127.0.0.1        127.0.0.1        23
1469   curl    4  10.201.219.236   54.245.105.25    80
1469   curl    4  10.201.219.236   54.67.101.145    80
1991   telnet  6  ::1              ::1              23
2015   ssh     6  fe80::2000:bff:fe82:3ac fe80::2000:bff:fe82:3ac 22

더 많은 예는 다음 사이트에 있습니다.숨은참조 도구원천. 내장된 설치 패키지는 다양한 용도로 사용 가능분산또는 컴파일 지침을 따를 수도 있습니다.

답변2

이를 사용하여 netstat다음과 같이 PID 및 프로세스 이름과 함께 tcp/ip 트래픽을 표시할 수 있습니다.

netstat -pt

실시간 방송을 시청하려면 watch -n아래와 같이 특정 간격을 사용하세요.

watch -n 2 netstat -pt

시간이 지남에 따라 이러한 종류의 정보를 수집하려면 이를 bash 스크립트로 저장하고 다음을 실행하면 됩니다.

sec=1
count=0
end=3600

echo > output.txt

while [ $count -lt $end ]; do
        netstat -pt | sed -e '1,2d' >> output.txt
        sleep $sec
        count=$((count+1))
done

이 작업은 netstat -pt1시간 동안 매초 실행되며 결과를 직접 저장합니다 output.txt.

awk '{ print $7 "\t" $5 }' output.txt 

형식화된 PID/프로세스_이름 및 웹사이트:프로토콜을 멋지게 인쇄하며, 수집된 각 줄에 대해 탭을 구분합니다.

답변3

tcpdump패킷이 보이는 네트워크 계층 에서는 사용자 프로세스에 대한 연결이 불가능합니다. 이 도구에는 네트워크 연결과 관련된 프로세스를 나열하는 ss옵션이 있습니다 . 특정 시점의 정보만 표시되기 -p때문에 자주 실행해야 하며 연결 ​​시간이 짧은 경우 정보가 손실될 수 있습니다.ss

전송되는 내용을 이해하려면 모든 것을 실행 tcpdump하고 캡처한 다음 나중에 에서 얻은 로컬 포트 ​​번호에 대해 캡처된 패킷을 필터링할 수 있습니다 ss.

연결은 항상 IP 주소에 이루어지기 때문에 사용된 DNS 이름에 대한 직접적인 정보는 제공되지 않습니다. 그러나 나중에 사용한 연결의 IP 주소를 사용하여 응답된 DNS 요청에 대한 네트워크 캡처를 검색할 수 있습니다. 이를 통해 동일한 DNS 이름을 사용하는 다른 DNS 이름에 대한 요청이 없는 한 사용된 DNS 이름을 알 수 있습니다. IP 주소.

프로세스가 수행 중인 작업을 실제로 알고 싶다면 를 사용하세요 strace. 확인자에게 전송된 DNS 이름과 전송된 모든 내용(단기 연결 포함)을 볼 수 있습니다.

관련 정보