모든 TCP 연결을 검색하기 위해 lsof를 올바르게 호출하는 방법은 무엇입니까?

모든 TCP 연결을 검색하기 위해 lsof를 올바르게 호출하는 방법은 무엇입니까?
# lsof -n -itcp | wc
     92     919   10212

# lsof -n | grep TCP | wc
   2482   27222  373861

내가 뭘 잘못했나요 lsof -itcp? 이러한 호출은 연결의 일부를 건너뛰고 스레드 연결처럼 보입니다.

답변1

올바른 구문은 다음과 같습니다.

lsof -a -i4 -i6 -itcp

그러면 IPv4 또는 IPv6 TCP 소켓이 선택됩니다.

답변2

두 가지 출력을 살펴보세요. 내 시스템의 예는 다음과 같습니다.

lsof -n -itcp | head -4
COMMAND     PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind    1509        root    8u  IPv4   9013      0t0  TCP *:sunrpc (LISTEN)
rpcbind    1509        root   11u  IPv6   9016      0t0  TCP *:sunrpc (LISTEN)
rpc.statd  1537       statd    8u  IPv4  10059      0t0  TCP *:36035 (LISTEN)

lsof -n | grep TCP | head -4
rpcbind    1509             root    8u     IPv4               9013      0t0        TCP *:sunrpc (LISTEN)
rpcbind    1509             root   11u     IPv6               9016      0t0        TCP *:sunrpc (LISTEN)
rpc.statd  1537            statd    8u     IPv4              10059      0t0        TCP *:36035 (LISTEN)
rpc.statd  1537            statd   10u     IPv6              10063      0t0        TCP *:45203 (LISTEN)

지금까지 눈에 띄는 유일한 차이점은 공백뿐이라는 것을 잠깐 살펴보면 알 수 있습니다. 실제 차이점을 찾기 위해 쉽게 비교할 수 있습니다.

lsof -n -itcp | sort >1
lsof -n | grep TCP | sort >2
diff -wu 1 2 | grep '^[+-]'
--- 1   2015-10-13 20:43:12.588658249 +0100
+++ 2   2015-10-13 20:43:18.272678740 +0100
-COMMAND     PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
+dconf      3618 3634     roaima   11u     IPv6              12705      0t0        TCP [::1]:45177->[::1]:6010 (ESTABLISHED)
+gdbus      3632 3633     roaima    5u     IPv6              14008      0t0        TCP [::1]:45179->[::1]:6010 (ESTABLISHED)
+virt-mana  3618 3636     roaima   11u     IPv6              12705      0t0        TCP [::1]:45177->[::1]:6010 (ESTABLISHED)
+virt-mana  3618 3645     roaima   11u     IPv6              12705      0t0        TCP [::1]:45177->[::1]:6010 (ESTABLISHED)

이 결과를 토대로 내 경우의 차이점은 IPv6 트래픽이라고 제안합니다. 귀하의 상황을 검토하고 싶을 수도 있지만 동일한 것 같습니다.

관련 정보