프로세스의 네트워크 연결 표시

프로세스의 네트워크 연결 표시

프로세스의 연결을 표시하는 방법이 있습니까? 이 같은:

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 뒤에 쉼표가 필요하므로 공백을 쉼표로 변환해야 합니다. 를 사용하도록 선택할 수도 있습니다 . 주어진 프로세스 이름을 가진 정확히 단일 프로세스가 있다는 것을 알고 있으면 &를 건너뛸 수 있습니다 .pidoflsoftr \ \,
sedtr

답변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(루트로) 사용할 수 있습니다 .

관련 정보