일정 기간 동안 어떤 프로세스가 어떤 웹사이트와 통신하는지 파악하고 싶습니다. 내가 찾은 모든 프로그램(예: 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 -pt
1시간 동안 매초 실행되며 결과를 직접 저장합니다 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 이름과 전송된 모든 내용(단기 연결 포함)을 볼 수 있습니다.