일부 포트가 수신 대기 중인지 여부를 테스트하기 위해 netcat을 사용하고 싶지만 영어와 다른 언어를 사용하는 시스템에서 명령이 실행되기 때문에 grep
단어를 기반으로 출력하는 것은 좋은 생각이 아닙니다 LISTENING
(예: I 독일 PC에서 ABHOREN
)라는 단어를 봤습니다.
netcat에 대한 맨페이지를 보려고 했지만 이에 대한 해결책을 찾을 수 없는 것 같아서 포트 상태를 문자열이 아닌 숫자 형식으로 변환한 사람이 있는지 궁금합니다.
미리 감사드립니다 :)
답변1
netstat
당신이 LISTENING이라고 말한다면 당신은 실제로 (가 아니라 ) 를 원한다는 뜻인 것 같습니다 netcat
. 대부분의 최신 시스템은 netstat -lnt
LISTENING TCP 소켓만 나열하고 다른 것은 아무것도 나열하지 않는다는 것을 이해합니다. 최소 RHEL7 설치에는 netstat가 없다는 점에 주의하십시오. ss
(동일한 플래그 ss -lnt
이지만 약간 다른 출력 형식)을 위해 더 이상 사용되지 않습니다.
일반적인 경우 대답은 환경에 로캘을 적절하게 설정하는 것입니다. 이렇게 하면 모든 프로세스가 영어(또는 더 나은 C)로 대화하게 됩니다.
답변2
netcat을 실행하기 전에(또는 전체 스크립트에 대해서도) 언어를 내보낼 수 있습니다.
LANG=C netcat ...
답변3
netstat
커널에 직접 물어볼 수 있는 것처럼 말이죠 . 해당 정보는 /proc/net/tcp
및 에서 제공됩니다 /proc/net/tcp6
. 두 파일 모두 동일한 형식으로 되어 있으며약간(기침) 출력을 읽기가 더 어렵지만 netstat
언어에 독립적입니다.
이것은 잘리고 약간 가려진 샘플 출력입니다.
$ cat /proc/net/tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0385 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 5126 1 f4807080 100 0 0 10 -1
1: 00000000:2328 00000000:0000 0A 00000000:00000000 00:00000000 00000000 113 0 5264 1 f62ff540 100 0 0 10 -1
2: 00000000:008B 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 4535 1 f5bf1540 100 0 0 10 -1
9: 0200000A:08AE xxxxxxxx:D512 01 00000030:00000000 01:00000018 00000000 0 0 759198 4 f63e95c0 24 4 3 10 19
10: 0200000A:0D9B xxxxxxxx:7582 01 00000000:00000000 00:00000000 00000000 113 0 634192 1 f63e90c0 21 4 22 5 3
:
아래 local_address
(로컬 포트)와 st
열(상태) 뒤에 있는 16진수에서 보고 있는 키 필드입니다 .
상태 열은 커널 소스에서 참조됩니다../include/net/tcp_states.h
, 그러나 도움이 되는 누군가가 StackExchange에 대해 질문을 했습니다.https://stackoverflow.com/questions/5992211/list-of-possible-internal-socket-statuses-from-proc
완전성을 위해 여기에 복제하겠습니다.
enum {
TCP_ESTABLISHED = 1,
TCP_SYN_SENT,
TCP_SYN_RECV,
TCP_FIN_WAIT1,
TCP_FIN_WAIT2,
TCP_TIME_WAIT,
TCP_CLOSE,
TCP_CLOSE_WAIT,
TCP_LAST_ACK,
TCP_LISTEN,
TCP_CLOSING, /* Now a valid state */
TCP_MAX_STATES /* Leave at the end! */
};
의견 중 하나에 따르면 상태는 1부터 순차적으로 번호가 매겨져 있습니다. 대부분 (LISTENING) 및 (ESTABLISHED)를 enum
찾고 있습니다.0A
01
NB: netstat가 이 정보를 어디서 가져왔는지 알아내기 위해 strace -e open,write netstat -an
.
필드 헤더에 대한 자세한 내용은 다음과 같습니다.http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html