중단 된 프로세스를 디버깅하려고합니다. 프로세스 ID에 대한 strace의 출력에는 마지막 줄이 있습니다.
recvfrom(9, <detached ...>
이 과정에서 프로세스가 소켓에서 기다리고 있음을 이해합니다.
그러나 나는 이것이 어떤 소켓인지, 어떤 종류의 소켓인지 모릅니다. 이에 대한 자세한 내용을 어떻게 알 수 있습니까? 파일 설명자 9가 더 많은 정보를 제공합니까? 이 파일 검색을 사용하여 무엇을 기다리고 있는지 자세히 알 수 있습니까?
리눅스에서 실행되는 파이썬 프로세스입니다.
사용하고 있으므로 strace
Linux에 있고 프로세스 ID를 알고 있다고 가정합니다. 이 경우에서 많은 정보를 찾을 수 있습니다 /proc
. 다음은 수행 할 작업의 예입니다.
마십시오 ls -l /proc/<pid>/fd
. 관심있는 fd에 해당하는 항목이 있으며 fd는 다음과 같은 소켓이어야합니다.
$ ls -l /proc/3311/fd
total 0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 0 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 1 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 2 -> /dev/pts/0
lrwx------ 1 alanau alanau 64 Sep 24 20:37 3 -> socket:[23182]
위의 예에서 3
관심 소켓입니다. 이 경우 뒤의 숫자 socket
는 inode 번호 23182
입니다.
이제 파일 /proc/net/tcp
에서 해당 inode를 찾으십시오.
$ cat /proc/net/tcp | grep 23182
2: 0F02000A:C43B 8EDC3AD8:0050 01 00000000:00000000 00:00000000 00000000 1000 0 **23182** 1 0000000000000000 23 0 0 10 -1
의 첫 번째 줄은 /proc/net/tcp
각 필드가 나타내는 내용 을 알려줍니다.
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
따라서이 예에서 원격 주소는 8EDC3AD8:0050
입니다. 이것이 16 진수 및 네트워크 바이트 순서의 ip_addres : port_number입니다. 그것을 십진수로 변환하면 216.58.220.142:80
.
이는 실제로 google.com의 포트 80에 대한 TCP 연결임을 알려줍니다!
inode 번호를 찾지 못하면 /proc/net/tcp
디렉토리에서 다른 프로토콜을 시도해보십시오 /proc/net/udp
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다