프로세스의 연결을 표시하는 방법이 있습니까? 이 같은:
show PID
여기서 show
는 이 작업을 수행하는 명령이고 PID
는 프로세스의 ID입니다. 내가 원하는 출력은 프로세스의 모든 연결(실시간)로 구성됩니다. 예를 들어, 프로세스가 연결을 시도하는 경우173.194.112.151출력은 입니다 173.194.112.151
.
Firefox에 대한 보다 구체적인 예:
show `pidof firefox`
Firefox의 경우 먼저구글 사이트, 그런 다음unix.stackexchange.com마지막으로 도착192.30.252.129. 브라우저를 닫으면 출력은 다음과 같아야 합니다.
google.com
stackexchange.com
192.30.252.129
(물론 이 출력은 다른 관련 연결이 많기 때문에 브라우저에 비현실적이지만 이는 단지 예일 뿐입니다.)
답변1
당신이 찾고있는 것 strace
! 내가 찾은이 답변은 askubuntu에 있습니다., 그러나 Unix에서는 작동합니다.
새 프로세스를 시작하고 모니터링하려면 다음을 수행하십시오.
strace -f -e trace=network -s 10000 PROCESS ARGUMENTS
알려진 PID를 사용하여 기존 프로세스를 모니터링하려면:
strace -p $PID -f -e trace=network -s 10000
그렇지 않은 경우에는 Linux에만 해당됩니다.격리된 네트워크 네임스페이스에서 프로세스를 실행하고 Wireshark를 사용하여 트래픽을 모니터링합니다.. 이는 strace
로그를 읽는 것보다 더 편리할 수 있습니다.
테스트 네트워크 네임스페이스를 만듭니다.
ip netns add test
가상 네트워크 인터페이스 쌍(veth-a 및 veth-b)을 만듭니다.
ip link add veth-a type veth peer name veth-b
veth-a 인터페이스의 활성 네임스페이스를 변경합니다.
ip link set veth-a netns test
가상 인터페이스의 IP 주소를 구성합니다.
ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0 ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
테스트 네임스페이스에서 라우팅을 구성합니다.
ip netns exec test route add default gw 192.168.163.254 dev veth-a
ip_forward를 활성화하고 NAT 규칙을 설정하여 생성한 네임스페이스에서 트래픽을 전달합니다(네트워크 인터페이스와 SNAT IP 주소를 조정해야 함).
echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
(원하는 경우 MASQUERADE 규칙을 사용할 수도 있습니다.)
마지막으로 새 네임스페이스에서 프로파일링하려는 프로세스를 실행하거나 Wireshark를 실행할 수 있습니다.
ip netns exec test thebinarytotest ip netns exec test wireshark
veth-a 인터페이스를 모니터링해야 합니다.
답변2
노력하다
lsof -i -a -p $(pidof firefox | sed 's/ /,/g')
~에서pidof 매뉴얼 페이지:
설명
Pidof는 지정된 프로그램의 프로세스 ID(pid)를 찾습니다.
이 ID를 표준 출력에 인쇄합니다.
~에서lsof 매뉴얼 페이지:
-i
이 옵션은 인터넷 주소가 i에 지정된 주소와 일치하는 파일 목록을 선택합니다. 주소가 지정되지 않은 경우 이 옵션은 모든 인터넷 및 x.25(HP-UX) 네트워크 파일 목록을 선택합니다.-a
그리고-p
이 옵션은 선택 사항인 프로세스의 파일 목록을 제외하거나 선택합니다.인프로세스ID엔터티(PID) 번호는 쉼표로 구분된 세트 s(예:123
또는 ) 에 있습니다123,^456
. (컬렉션에는 공백이 없어야 합니다.)
이유 : 프로세스 이름과 일치하는 여러 프로세스가 있는 경우 에서 까지 sed
의 PID 목록을 원하며 각 PID 뒤에 쉼표가 필요하므로 공백을 쉼표로 변환해야 합니다. 를 사용하도록 선택할 수도 있습니다 . 주어진 프로세스 이름을 가진 정확히 단일 프로세스가 있다는 것을 알고 있으면 &를 건너뛸 수 있습니다 .pidof
lsof
tr \ \,
sed
tr
답변3
또 다른 접근 방식은 다음과 같습니다.
ss -nap | grep $(pidof firefox)
예제 출력:
tcp ESTAB 0 0 192.168.0.222:49050 216.58.218.164:443 users:(("firefox",3280,69))
tcp ESTAB 0 0 192.168.0.222:48630 198.252.206.25:443 users:(("firefox",3280,106))
tcp ESTAB 0 0 192.168.0.222:44220 216.58.217.38:443 users:(("firefox",3280,140))
tcp ESTAB 0 0 192.168.0.222:52690 54.240.170.181:80 users:(("firefox",3280,107))
tcp ESTAB 0 0 192.168.0.222:48744 198.252.206.25:443 users:(("firefox",3280,87))
tcp ESTAB 0 0 192.168.0.222:48811 198.252.206.25:443 users:(("firefox",3280,73))
답변4
netstat -p
매뉴얼 페이지에서 다음을 사용해 볼 수도 있습니다 .
netstat - 네트워크 연결, 라우팅 테이블, 인터페이스 통계, 가장 무도회 연결 및 멀티캐스트 멤버십을 인쇄합니다.
네트워크 연결만 표시하려면 를 사용하십시오 netstat -tup
. 프로세스 PID를 보려면 루트여야 할 수도 있습니다.
netstat
시스템에 이 기능이 없다면 아마도 그렇게 할 것입니다 ss
. 구문은 거의 동일합니다. 그런 다음 ss -tup
(루트로) 사용할 수 있습니다 .