[RHEL6] 네트워크 명령어 5탄(netstat, nslookup, ntpdate, ping)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 네트워크 명령어 5탄(netstat, nslookup, ntpdate, ping)

by 찬찬이 아빠 2020. 1. 23.
반응형
  14. netstat(네트워크 상황 출력)

 1) 경로 : /bin/netstat

 2) 요약 : 네트워크의 연결과 포트를 출력

 3) 사용 방법 : netstat [-vWeenNcCF] [<Af>] -r

                       netstat {-V|--version|-h|--help}

                       netstat [-vWnNcaeol] [<Socket> ...]

                       netstat {[-vWeenNac] -i | [-cWnNe] -M | -s }

 4) 첫번째 인자

 -r, --route : 라우팅 테이블을 출력

 -i, --interfaces : 인터페이스 테이블을 출력

 -g, --groups : 멀티캐스트 그룹을 숫자 형태로 출력

 -s, --statistics : 네트워킹 통계를 출력

 -M, --masquerade : 매스커레이트 상태를 출력

 

 5) 옵션

 -v, --verbose : 상세한 정보를 출력

 -W, --wide : 긴 형태의 IP 주소를 출력

 -n, --numeric : 도메인 형태가 아닌 IP 주소 형태로 출력

 --numeric-hosts : 호스트명을 도메인명으로 해석하지 않고 숫자 형태로 출력

 --numeric-ports : 포트명을 해석하지 않고 숫자 형태로 출력

 --numeric-users : 사용자명을 해석하지 않고 숫자 형태로 출력

-N, --symbolic : 하드웨어명을 해석하여 출력

 -e, --extend : 보다 상세한 정보를 출력

 -p, --programs : 소켓의 PID 프로그램 정보를 출력

 -c, --continuous : 매 초마다 정보를 업데이트하며 계속적으로 출력

 -l, --listening : LISTENING 상태의 서버 소켓을 출력

 -a, --all, --listening : 소켓을 모두 출력

 -o, --timers : 네트워킹 타이머와 관련된 정보를 출력

 -F, --fib : FIB(Forwarding Information Base) 정보를 출력

 -C, --cache : FIB 대신 라우팅 캐시를 출력

 -V, --version : 버전 정보를 출력

 -h --help : 사용법 출력

 

 6) 추가 설명

netstat 명령어는 네트워킹과 연결된 시스템의 정보를 출력합니다. 아래와 같이 인자가 없다면 외부에 열려 있는 모든 소켓의 정보를 출력합니다.

$ netstat
Active Internet connections (w/o servers)
Proto Recv-Q send-Q Local Address
Active UNIX domain sockets (w/o servers)
Proto  RefCnt  Flags  Type  State  I--Node  Path
unix     2      []    DGRAM         2584    @org/kernel/udev/udevd
unix     2      []    DGRAM         5542    @/org/freedesktop/hal/udev_event
unix     16     []    DGRAM         3504    /dev/log
unix     3      []    STREAM  CONNECTED  10706   @tmp/dbus-3FuCK04Cyo
unix     3      []    STREAM  CONNECTED  10706   

 

아래는 -nr 옵션으로 커널 라우팅 정보를 숫자 형태의 주소로 출력합니다. 이 옵션은 route 명령어와 같은 결과를 출력합니다.

$ netstat -nr
Kernel IP routing table
Destination     Gateway      Genmask     Flags     MSS   Window   irtt    Iface
192.168.1.10     0.0.0.0     255.255.255.0  U       0      0        0      eth0
169.254.0.0      0.0.0.0     255.255.0.0    U       0      0        0      eth0
0.0.0.0          192.168.1.1   0.0.0.0     UG       0      0        0      eth0

 

다음은 위의 예제에서 출력한 각 필드의 내용입니다.

필드명 설명
Gateway 라우팅 항목에서의 게이트웨이
Genmask 라우팅 항목의 넷 마스크
Flags

라우팅 경로에 관한 여러 플래그를 표시

 - U : 인터페이스가 up인 상태

 -H : 라우팅 경로를 통해 호스트로의 연결

 -G : 게이트웨이의 라우트

 -D : 라우트가 재지정되어 동적으로 생성

 -M : 라우팅 경로가 ICMP 리다이렉트 메시지를 통해 수정되었을 경우

MSS

Maximum Segment Size의 약자. 최대 세그먼트의 크기

Windows

한 번에 받는 데이터의 수신량

irtt

initial round trip time의 약자로 0은 초기 설정값을 사용한다는 의미

Iface

네트워크 인터페이스

 

-i 옵션으로 네트워크 인터페이스의 MTU 값과 송수신 패킷의 에러나 오버런 정보 등을 확인할 수 있습니다.

$ netstat -i
Kernel Interface table
Iface  MTU  Met  RX-OK  RX-ERR  RX-DRP  RX-OVR  TX-OK  TX-ERR  TX-DRP  TX-OVR  Flg
eth0   1500  0    40      0        0       0      43     0       0       0     BMRU
lo     16432  0    32      0        0       0      13     0       0       0    LRU

 

다음은 위의 예제에서 출력된 필드의 설명입니다.

필드명 설명
Iface 네트워크 인터페이스
MTU 최대 전송 단위로 Maximum Transmission Unit의 약자
Met 매트릭 값
RX-OK/RX-ERR 패킷 수신 / 패킷 수신 에러
RX-DRP/RX-OVR 패킷 수신 손실 / 패킷 수신 오버런
TX-OK/TX-ERR 패킷 송신 / 패킷 송신 에러
TX-DRP/TX-OVR 패킷 송신 손실 / 패킷 송신 오버런

 

-ta 혹은 -tcp -a 옵션은 TCP 프로토콜과 관련된 소켓을 출력합니다. 참고로 -u 혹은 -udp 옵션은 UDP 프로토콜을 출력합니다.

$ netstat -ta
Active Internet connections (servers and established)
Proto   Recv-Q   Send-Q   Local Address   Foreign Address   State
tcp      0         0       localhost:ipp    *:*             LISTEN
tcp6     0         0       localhost:ipp   [::]:*           LISTEN

 

아래 예제는 -anp 옵션으로 각 소켓에 속한 프로그램의 PID와 이름을 출력하는데 네트워크 연결 상태를 확인할 때 유용합니다.

$ netstat -nap|more
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto   Recv-Q   Send-Q   Local Address   Foreign Address   State   PID/Program name
tcp     0         0        127.0.0.1:631     0.0.0.0:*      LISTEN       -
tcp6    0         0        ::1:631           :::*           LISTEN       -
udp     0         0        0.0.0.0:55863     0.0.0.0:*                   -
udp     0         0        0.0.0.0:68     0.0.0.0:*                   -
udp     0         0        0.0.0.0:5432     0.0.0.0:*                   -
Active UNIX domain sockets (server and established)
Proto   RefCnt   Flags   Type   State   I-Node   PID/Program name Path
unix      2      [ ACC ] STREAM   LISTENING     5633    -       /var/run/cups/cups.socket
unix      2      [ ACC ] STREAM   LISTENING     3842    -       /var/run/avahi-daemon.socket

 

 

 

  15. nslookup(네임서버 쿼리)

 1) 경로 : /usr/bin/nslookup

 2) 요약 : 인터넷 네임 서버를 대화형으로 질의

 3) 사용 방법 : nslookup [-옵션] [host_to_find | -서버]

 4) 옵션

 -추가 예정

 

 5) 추가 설명

nslookup 명령어는 네임 서버 설정이 제대로 동작하는지 확인할 때 유용합니다. /etc/resolv.conf 파일의 네임 서버를 기준으로 쿼리를 보냅니다. 

 

아래는 nslookup 명령어에 질의할 서버의 주소를 지정합니다.

$ nslookup google.com
Server: 192.168.1.10
Address : 192.168.1.10#53

Non-authoritative answer:
Name: google.com
Address: 74.125.19.147
Name: google.com
Address: 74.125.19.99
Name: google.com
Address: 74.125.19.103
Name: google.com
Address: 74.125.19.104

 

nslookup 명령어만 실행하면 대화형으로 확인할 수 있습니다.

$ nslookup
> google.co.kr
Server: 192.168.1.10
Address : 192.168.1.10#53

Non-authoritative answer:
Name: google.com
Address: 74.125.19.147
Name: google.com
Address: 74.125.19.99
Name: google.com
Address: 74.125.19.103
Name: google.com
Address: 74.125.19.104
>

 

대화형에서는 'set type'을 지정하여 좀더 세부적인 내용을 질의할 수 있습니다.

> set type=SOA
> google.co.kr
Server:192.168.1.10
Address: 192.168.1.10#53

Non-authoritative answer:
google.co.kr
     origin = ns.google.com
     mail addr = dns-admin.google.com
     serial = 1420227
     refresh = 21600
     retry = 3600
     expire = 1209600
     minimum = 300
     
Authoritative answers can be found from:
google.co.kr     nameserver = ns1.google.com.
google.co.kr     nameserver = ns2.google.com.
google.co.kr     nameserver = ns3.google.com.
google.co.kr     nameserver = ns4.google.com.
ns1.google.com   internet address = 216.239.32.10
ns2.google.com   internet address = 216.239.32.10
ns3.google.com   internet address = 216.239.32.10

 

메일 서버의 내용인 MX 레코드에 쿼리를 보낼 수도 있습니다.

> set type=MX
> google.co.kr

 

아래 표는 set type에 지정할 수 있는 유형들입니다. set type=TYPE 형태로 타입을 변경하면 해당되는 타입 정보를 확인할 수 있습니다.

 

타입(type) 설명
A 호스트 어드레스
ANY 대부분 관련된 정보
CNAME 알리아스와 관련된 CNAME(Canonical name) 레코드 정보
HINFO 호스트의 CPU와 운영체제를 지정하는 HINFO 레코드 정보
MD MD(mail destination) 레코드 정보
MG MG(mail Group member) 레코드 정보
MINFO 메일 박스나 메일 리스트 관련 MINFO(Mailbox or mail list information)
레코드 정보 MR(Mail rename) 레코드 정보
MX MX(Mail exchanger) 레코드 정보
NS NS(Nameserver) 레코드 정보
PTR 호스트명 지정 PTR 레코드 정보
SOA SOA(Domain start--of-authority) 레코드 정보
UINFO UINFO(User information) 레코드 정보

 

 

 

  16. ntpdate(시스템 날짜 시간 설정)

 1) 경로 : /usr/sbin/ntpdate

 2) 요약 : 시스템의 날짜와 시간을 설정

 3) 사용 방법 : ntpdate [-bBdoqsuv] [-a key] [-e authdelay] [-k keyfile] [-o version] [-p samples] [-t timeout] server [...]

 4) 옵션

 -a key : 인증 함수를 활성화하고, 인자로지정한 키(key)를 이용해 키 지시자를 사용

 -B : 측정된 오프셋이 +-128ms보다 크더라도 강제적으로 adjtime() 시스템 콜을 사용

 -b : 퍼포먼스가 느린adjtime() 시스템 콜 대신 settimeofday() 시스템 콜을 사용, 이 옵션은 부팅 시 시작 파일에서 주로 사용

 -d : 디버깅 모드에서 사용하는 로컬 시간을 조절하지 않고 유용한 디버깅 정보를 출력

 -k keyfile : 스트링 키 파일(keyfile)을 인증키 파일로 지정. 기본은 /etc/ntp.keys이고, 이 파일은 ntpd의 포맷 형식이어야 함

 -q : 시간만 확인하고 시간을 설정하지 않음

 -s : 표준 출력을 시스템 로그로 보냄

 -t timeout : 최대의 응답 대기시간(timtout)을 설정. 기본값은 1초

 -u : 밖으로 나가는 패킷에 unprivileged port를 사용. 참고로 -d 옵션은 항상 unprivileged ports를 사용함(unprivileged port 번호 : 1024에서 65535까지를 말함)

 -v : 상세한 정보를 출력

 

 5) 추가 설명

NTP는 rdate 명령어와 기능은 비슷하나 시간을 0.01초 이하의 오차로 맞출 수 있습니다. GPS 위성에서 표준 시각 정보를 받는 타임 서버를 NTP Primary Time Server 혹은 Stratum 1이라고 하는데 우리 나라에는 데이콤(gps.bora.net), 코넷(ntp.kornet.net), 부산대학교(ntp1.cs.pusan.ac.kr / ntp2.cs.pusan.ac.kr), 한국 푲누 과학연구원 시간 주파수 연구실(time.kriss.re.kr)이 있습니다. Stratum 1 서버로부터 표준 시간을 받는 타임 서버를 NTP Secondary Time Server 혹은 Stratum 2 서버라고 하는데, 대표적인 예가 PSINet Korea(time.nuri.net)이 있습니다.

 

아래는 time.kriee.re.kr 서버로 명령을 실행합니다.

# ntpdate time.kriss.re.kr
23 Jan 09:12:13 ntpdate[7339]: no server suitable for synchronization found

 

위의 예제와 같은 에러가 날 때는 -d 옵션으로 원인이 무엇인지 확인합니다.

# ntpdate -d time.kriss.re.kr
23 Jun 09.12.12 ntpdate[7372]: ntpdate 4.2.4p6@1.1549-o Thu Jun 23 09:12:14 UTC 2020 (1)
transmit(210.98.16.100)
transmit(210.98.16.100)
transmit(210.98.16.100)
transmit(210.98.16.100)
transmit(210.98.16.100)
210.98.16.100: Server dropped: no data
server 210.98.16.100, port 123
stratum 0. precision 0, leap 00, trust 000
refid [210.98.16.100], delay 0.00000, dispersion 64.0000
transmitted 4, in filter 4
reference time:     00000000.00000000 Thu, Jun 23 2036 09:12:16.000
originate timestamp:00000000.00000000 Thu, Jun 23 2036 09:12:16.000
transmit timestamp: cf346866.4cfba881 Fri, Jun 2010 12:14:12.300
filter delay:  0.00000  0.00000  0.00000  0.00000
               0.00000  0.00000  0.00000  0.00000
filter offset:  0.00000  0.00000  0.00000  0.00000
                0.00000  0.00000  0.00000  0.00000
delay 0.00000, dispersion 64.00000
offset 0.00000
23 Jun 09:13:15 ntpdate[7372]: no server suitable for synchronization found

디버깅 결과 NTP 프로토콜이 사용하는 123번 포트의 서비스가 막혀 있으므로 다른 서버로 접속합니다.

 

 

 

  17. ping(네트워크 연결 확인)

 1) 경로 : /bin/ping

 2) 요약 : ICMP_ECHO_REQUEST 메시지를 네트워크 호스트로 보냄

 3) 사용 방법 : ping [옵션] host

 4) 옵션

 -b : 브로드 캐스트 주소로 핑을 보냄

 -c count : 지정한 숫자(count)만큼 패킷을 보냄

 -f : 핑 플로딩(ping Flooding) 패킷을 보냄. 초기 유닉스 시스템의 도스 핑 공격ㅇ로 이용되었음

 -i wait : 지정한 간격(wait)으로 패킷을 보냄

 -I interface_address : 발신지 주소의 인터페이스 주소를 지정

 -I preload : 핑을 보내기 전 미리 지정한 수(preload)만큼 패킷을 보냄

 -n : 변환되어 되돌아오는 패킷의 호스트명을 IP 주소 형태로 출력

 -p pattern : 송신할 패킷을 채우기 위해 16 바이트까지 지정. 이는 네트워크 데이터 문제를 진단하는데 유용

 -q : 패킷의 응답정보는 출력하지 않고 통계 정보만 출력

 -r : 라우팅 테이블을 이용하지 않고 직접적으로 연결된 호스트에 패킷을 보냄

 -s packetsize : 보낼 패킷 크기(packetsize)을 지정. 기본값은 56이며 최대값은 65507임

 -v : 에코 응답(ECHO_RESPONSE)과 함께 ICMP 패킷의 상세 정보를 출력

 -v : 버전 정보를 출력

 

 5) 추가 설명

ping 명령어는 네트워크에 ICMP 패킷을 보내 호스트의 연결성을 분석합니다. 네트워크에 연결되어 있는 임의의 호스트에서 대상 호스트로 ICMP 패킷을 보내면, 패킷은 대상 호스트에 도착한 후에 시간을 저장하고 패킷을 다시 발신지 호스트로 되돌아옵니다.

 

ping 명령은 호스트 간 패킷 왕복 시간을 계산하여 호스트의 연결성이나 동작 유무를 판답합니다. 만인 패킷에 대한 응답이 없다면 대상 호스트의 연결이나 동작에 이상이 발생했다고 판단할 수 있습니다. 아래에서 -c 옵션으로 패킷 수를 3개로 제한하고 왕복 시간을 결과로 출력합니다.

 

$ ping -c 3 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.011 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.022 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.033 ms
--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet lloss, time 2000ms
rtt min/avg/max/mdev = 0.022/0.022/0.022/0.003 ms

 

아래는 60.40.200.125 호스트에 패킷을 보냅니다. "Destination Host Unreachable" 메시지로 대상 호스트가 문제가 있음을 판단할 수 있습니다.

$ ping -c 3 60.40.200.125
PING 60.40.200.125 (60.40.200.125) from 60.40.200.122 : 56(84) bytes of data.
FROM 60.40.200.122: Destination Host Unreachable
FROM 60.40.200.122: Destination Host Unreachable
FROM 60.40.200.122: Destination Host Unreachable
--- 60.40.200.125 ping statistics ---
3 packets transmitted, 0 packets received, +3 errors, 100% packet loss

 

<참고사항>

1. ping에 응답하지 않는 방법

아래처럼 하면 핑 패킷에 대해 반응하지 않습니다.

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

 

아래는 브로드 캐스트 패킷에만 반응하지 않습니다.

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

 

부팅 후에도 적용하려면 아래 파일에 추가합니다. sysctl -w 명령으로도 저장할 수 있습니다.

# cat /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcsts = 1
net.ipv4.icmp_echo_ignore_all = 1

 

2. ICMP

인터넷 제어 메시지 규약(Internet Control Message Protocol)의 약자입니다. 인터넷 오류 메시지를 생성, 검사하고 IP에 관련된 정보를 제공하는 통시니 규약을 말합니다. 예를들어 ping 멸령은 인터넷 접속 테스트를 위해 ICMP를 사용합니다.

 

3. 패킷

네트워크에서 데이터 전송을 위한 단위를 말합니다. 패킷의 크기는 수신 측과 송신 측에서 사용하는 통신 규약에 의하여 결정됩니다. 일반적으로 128byte가 표준이지만 52, 64, 256 옥텟(Octet) 등 편의에 따라 크기를 바꿀 수 있습니다. 옥텟은 보통 8bit로 구성하고 이를 하나의 문자로 간주합니다.

반응형

댓글