lsof는 프로토콜을 보여줍니다: TCP

lsof는 프로토콜을 보여줍니다: TCP

나는 달려가서 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

관련 정보