현지화 - netcat에 대한 독립적인 출력

현지화 - netcat에 대한 독립적인 출력

일부 포트가 수신 대기 중인지 여부를 테스트하기 위해 netcat을 사용하고 싶지만 영어와 다른 언어를 사용하는 시스템에서 명령이 실행되기 때문에 grep단어를 기반으로 출력하는 것은 좋은 생각이 아닙니다 LISTENING(예: I 독일 PC에서 ABHOREN)라는 단어를 봤습니다.

netcat에 대한 맨페이지를 보려고 했지만 이에 대한 해결책을 찾을 수 없는 것 같아서 포트 상태를 문자열이 아닌 숫자 형식으로 변환한 사람이 있는지 궁금합니다.

미리 감사드립니다 :)

답변1

netstat당신이 LISTENING이라고 말한다면 당신은 실제로 (가 아니라 ) 를 원한다는 뜻인 것 같습니다 netcat. 대부분의 최신 시스템은 netstat -lntLISTENING 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찾고 있습니다.0A01

NB: netstat가 이 정보를 어디서 가져왔는지 알아내기 위해 strace -e open,write netstat -an.

필드 헤더에 대한 자세한 내용은 다음과 같습니다.http://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

관련 정보