나는 달려가서 sudo lsof -p $(pidof foo)
이것들을 많이 얻었습니다. 이것이 무엇을 나타내는지 아는 사람이 있나요? 프로세스에서 오는 것이라는 것을 알고 있지만 포트/IP 주소가 없습니다.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
foo 115450 root 592u sock 0,7 0t0 957442022 protocol: TCP
foo 115450 root 593u sock 0,7 0t0 956964126 protocol: TCP
foo 115450 root 594u sock 0,7 0t0 957091053 protocol: TCP
foo 115450 root 595u sock 0,7 0t0 957498237 protocol: TCP
foo 115450 root 596u sock 0,7 0t0 957077603 protocol: TCP
foo 115450 root 597u sock 0,7 0t0 957211699 protocol: TCP
답변1
Stephen Harris의 답변이 댓글로 게시되어 삭제된 경우 답변으로 게시하겠습니다.
귀하의 응용 프로그램이 TCP 도메인에 소켓을 생성했지만(아마도 소켓(2)을 통해) 소켓을 어떤 포트에도 바인딩하지 않았습니다(예: connect(2), listening(2) 또는 바인딩(2)을 통해).
답변2
소켓을 잘못 사용하고 있는 코드를 찾으려면 "-e Trace=network" 옵션과 함께 strace를 사용해 보십시오. 예를 들어,
[pid 16700] getsockopt(6, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
[pid 16700] getpeername(6, {sa_family=AF_INET, sin_port=htons(12345),
sin_addr=inet_addr("10.4.50.77")}, [112->16]) = 0
[pid 16700] getsockname(6, {sa_family=AF_INET, sin_port=htons(23456),
sin_addr=inet_addr("10.4.100.60")}, [112->16]) = 0
[pid 16700] setsockopt(6, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 16700] setsockopt(6, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 16700] setsockopt(6, SOL_TCP, TCP_KEEPINTVL, [15], 4) = 0
[pid 16700] setsockopt(6, SOL_TCP, TCP_KEEPIDLE, [15], 4) = 0