[Linux]네트워크 점검에 자주 사용하는 명령어 14개
서버에서 네트워크 상태 점검은 매일 하는 일이 아니라, 서버를 설치하거나 서버 접속에 문제가 있을 때나 하기 때문에 이와 관련된 명령어들의 사용법을 잊기 쉽습니다. 저도 예외는 아니죠! 사용할 때마다 man 페이지를 보는데 사용하는 옵션은 거의 동일하더라구요. 그래서 제가 주로 사용하는 옵션으로 사용법을 정리해 봅니다.
- arp : ARP (Address Resolution Protocol) 캐시 테이블을 보여줍니다.
- dig : 도메인 이름에 대한 DNS 정보를 조회합니다.
- lsof -i [:port] : 현재 열려 있는 네트워크 연결을 보여줍니다.
- mtr : traceroute와 ping의 결합으로, 연결된 각 노드에 대한 지속적인 네트워크 성능 측정을 제공합니다.
- ncat(nc) : 데이터를 송수신하여 네트워크 관리, 보안, 테스트 등에 유용하게 활용됩니다.
- netstat : 현재 열려있는 포트와 네트워크 연결 정보를 보여줍니다.
- nmap : 어떤 호스트가 활성이며 어떤 포트가 열려 있는지 확인할 때 사용합니다.
- nslookup : 도메인 이름에 대한 DNS 정보를 조회합니다.
- ping : 호스트 간의 네트워크 연결을 확인하는 데 사용됩니다.
- route : 현재 라우팅 테이블을 보여줍니다.
- ss : 현재 소켓 통계와 연결 상태를 자세히 보여줍니다.
- tcpdump : 네트워크 패킷을 캡처하고 분석하는데 사용됩니다.
- tracepath : 목적지까지 패킷이 어떤 경로로 이동하는지를 보여줍니다.
- traceroute : 목적지까지 패킷이 어떤 경로로 이동하는지를 보여줍니다.
1. arp 사용법 및 예제
ARP 캐시 테이블을 확인하여 올바른 IP-MAC 주소 매핑이 되어 있는지 확인할 수 있습니다.arp [-n] destination -n: IP주소로 출력[root@centos8 ~]# arp -nAddress HWtype HWaddress Flags Mask Iface 10.0.2.2 ether 52:54:00:12:35:02 C enp0s3 192.168.56.1 ether 0a:00:27:00:00:0a C enp0s8 192.168.56.100 ether 08:00:27:80:ed:0e C enp0s8 192.168.56.104 ether 08:00:27:1b:83:a5 C enp0s8
2. dig 사용법 및 예제
KT의 인터넷망을 사용하고 있는데 회사의 메일 서버에 접속할 수 없을 때 사용합니다. "nslookup" 명령어와 동일한 기능을 합니다.dig [@DNS] [[-4] | [-6]] [name] [type] @DNS: Domain Name Server가 지정되지 않으면, "/etc/resolv.conf" 파일에서 찾습니다. name: 찾고자 하는 도메인 네임을 지정합니다. type: 레코드 타입을 지정합니다.(ANY, A, AAAA, MX, SIG, NS, CNAME 등(디폴트 A))[root@centos8 ~]# dig @168.126.63.1 mail.vitalchem.com MX; <<>> DiG 9.11.36-RedHat-9.11.36-3.el8 <<>> @168.126.63.1 mail.vitalchem.com MX ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10708 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: a3b8c59ebfbf3a43010000006531febe1ee75086d7028380 (good) ;; QUESTION SECTION: ;mail.vitalchem.com. IN MX ;; ANSWER SECTION: mail.vitalchem.com. 451 IN CNAME qiye.aliyun.com. qiye.aliyun.com. 151 IN CNAME alimail-access-agent-ay29.aliyun.com. alimail-access-agent-ay29.aliyun.com. 18 IN CNAME alimail-access-agent-ay29.aliyun.com.gds.alibabadns.com. ;; AUTHORITY SECTION: gds.alibabadns.com. 600 IN SOA gdsns1.alibabadns.com. none. 2018122017 1800 600 3600 360 ;; Query time: 79 msec ;; SERVER: 168.126.63.1#53(168.126.63.1) ;; WHEN: Thu Oct 19 16:58:11 KST 2023 ;; MSG SIZE rcvd: 278
3. lsof -i [:port] 사용법 및 예제
현재 ssh 접속을 하고 있는 사용자 및 IP를 확인할 때 사용합니다. 자세한 사용법을 알고 싶으시다면 여기를 클릭하세요lsof -i [:port] :port : 포트번호를 지정하지 않으면 열린 포트 전체를 대상으로 실행합니다.[root@centos8 ~]# lsof -i :22COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 996 root 5u IPv4 25935 0t0 TCP *:ssh (LISTEN) sshd 996 root 7u IPv6 25943 0t0 TCP *:ssh (LISTEN) sshd 34338 root 5u IPv4 97098 0t0 TCP centos8:ssh->192.168.56.1:63485 (ESTABLISHED) sshd 34342 root 5u IPv4 97098 0t0 TCP centos8:ssh->192.168.56.1:63485 (ESTABLISHED) sshd 35803 root 5u IPv4 129125 0t0 TCP centos8:ssh->192.168.56.1:64055 (ESTABLISHED) sshd 35807 root 5u IPv4 129125 0t0 TCP centos8:ssh->192.168.56.1:64055 (ESTABLISHED) sshd 36006 root 5u IPv4 130693 0t0 TCP centos8:ssh->192.168.56.1:64103 (ESTABLISHED) sshd 36035 jeus 5u IPv4 130693 0t0 TCP centos8:ssh->192.168.56.1:64103 (ESTABLISHED)
4. mtr 사용법 및 예제
SD-WAN을 사용해서 본사와 망 구성이 되어 있는데 경로 및 Traffic 상태를 점검할 때 사용합니다.
WinMTR 사용법과 비교해 보시면 좋습니다.mtr [-4|-6] [-n] [-i INTERVAL] [-c COUNT] [-P PORT] HOSTNAME -4: IPv4 -6: IPv6 -n: IP주소로 출력 -i SECONDS: ICMP ECHO requests간 시간(초). default 1초 -c COUNT: Ping 패킷을 전송하는 횟수 -P PORT: 특정 포트 지정 HOSTNAME: 목적지 주소[root@centos8 ~]# mtr -4 -n 10.x.xx.xxxMy traceroute [v0.92] centos8 (10.0.2.15) 2023-10-19T17:45:23+0900 Keys: Help Display mode Restart statistics Order of fields quit Packets Pings Host Loss% Snt Last Avg Best Wrst StDev 1. 10.0.2.2 0.0% 307 1.0 0.6 0.1 10.0 0.6 2. 58.xx.xxx.x 0.0% 307 4.8 7.2 2.2 110.5 9.2 3. 58.xx.xxx.x 0.0% 307 4.3 4.5 1.9 58.2 5.0 4. 58.xx.xxx.x 0.0% 307 5.3 5.1 2.7 104.9 5.9 5. ??? 6. ??? 7. ??? 8. ??? 9. ??? 10. ??? 11. 10.xxx.xx.xxx 0.3% 306 62.5 64.9 60.9 161.4 9.4 12. 10.x.xx.xxx 0.7% 306 63.9 66.1 61.0 158.5 10.5
5. ncat(NC) 사용법 및 예제
특정 호스트로 접속이 불가할 때, 이용하는 포트가 막혀 있는지 확인할 수 있습니다.nc -z -v HOSTNAME PORT -z: 데이터를 보내지 않고 열린 포트만 검색하도록 지시 -v: 자세한 정보를 제공 HOSTNAME: 목적지 PORT: 범위지정 가능, 1-65535[root@centos8 ~]# nc -z -v www.naver.com 80Ncat: Version 7.92 ( https://nmap.org/ncat ) Ncat: Connected to 223.130.195.200:80. Ncat: 0 bytes sent, 0 bytes received in 0.06 seconds.
6. netstat 사용법 및 예제
로컬에서 소켓을 사용하고 있는 프로세스ID와 프로세스 이름을 표시하기 위해 사용합니다.netstat [옵션] [간격(초)] -a: 모든 소켓 표시 -t: TCP 만 표시 -u: UDP 만 표시 -n: 호스트, 포트 번호 등의 이름 확인을 하지 않고 숫자로 표시(--numeric) -p: 소켓을 사용하고 있는 프로세스 ID와 프로세스명 표시 -l: 연결 대기 상태인 소켓만 표시(--listening) -i: *모든 NIC 정보 출력(--interfaces) -r: *라우팅 테이블 표시(--route)(route 명령어와 유사한 정보 출력) -s: *프로토콜별 네트워크 통계 정보 출력(--statistics)[root@oel7u8 ~]# netstat -tnpl 2 | grep 1521tcp6 0 0 :::1521 :::* LISTEN 11986/tnslsnr tcp6 0 0 :::1521 :::* LISTEN 11986/tnslsnr tcp6 0 0 :::1521 :::* LISTEN 11986/tnslsnr tcp6 0 0 :::1521 :::* LISTEN 11986/tnslsnr ^C[상태정보] - LISTENING : 포트 열림. (연결 대기). 서버에서 클라이언트로 들어오는 패킷을 위해 소켓을 열고 기다리는 상태 - SYN_SENT : 로컬 시스템의 클라이언트 애플리케이션이 원격 호스트에 연결을 요청(SYN)한 상태 - SYN_RECEIVED : 원격으로 부터 연결 요청을 받은 상태. (ACK는 미수신.) - ESTABLISHED : 3-way handshaking이 완료된 후 서버와 클라이언트가 서로 연결된 상태 - CLOSE_WAIT : 종료 대기 - TIME_WAIT : 연결 종료되었으나 원격의 수신 보장을 위해 마지막 ACK 패킷을 기다리는 상태 - CLOSE : 연결이 종료된 상태[root@oel7u8 ~]# netstat -rnKernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 58.54.220.1 0.0.0.0 UG 0 0 0 ens18 58.54.220.0 0.0.0.0 255.255.255.0 U 0 0 0 ens18 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0[Genmask]:General Mask - 목적지 호스트를 식별하기 위한 마스크: 255.255.255.255 - 목적지 네트워크 주소를 식별하기 위한 마스크: Netmask를 의미(예, 255.255.255.0) - Default Gateway를 식별하기 위한 마스크: 0.0.0.0 [Flags] - U: host is Up, 경로가 활성화되어 있음 - G: use Gateway, 게이트웨이를 사용함 - H: target is Host, 목적지가 호스트를 의미함 [MSS]: Maximum Segment Size - 0: 기본값, 라우팅 테이블에서는 특정 인터페이스에 대한 MSS를 설정하지 않음 - 대부분의 시스템에서 MSS는 TCP 연결이 설정될 때 협상되므로, 라우팅 테이블에 명시적으로 나타나지 않음 [Window] - 0: 기본값, 라우팅 테이블에서는 이 값을 설정하지 않음 - 실제 TCP 윈도 크기는 각 TCP 연결 시 동적으로 결정됨 [irtt]: initial round trip time - 0: 기본값, 라우팅 테이블에서는 이 값을 설정하지 않음 - 실제 라운드 트립 시간은 네트워크 연결이 수립된 후에 측정됨
7. nmap 사용법 및 예제
원격 호스트의 특정 포트가 열려있는지 상태를 확인하기 위해 사용합니다. 자세한 사용법은 여기룰 클릭해 주세요. Windows에서 사용하는 "tcping" 명령어도 확인할 수 있습니다.nmap [option] destination [port] [option] -A: OS and version detection, script scanning, and traceroute -T4: faster execution -sS: TCP SYN 스캔 -sT: TCP 연결 스캔 -sA: TCP ACK 스캔 -sU: UDP 스캔 -sO: IP프로토콜 스캔 -O: 운영체계 확인 -v: 스캔 결과를 상세하게 출력 [port] -p T:port1[,port2],port_fr-port_to U:port1[,port2],port_fr-port_to[root@centos8 ~]# nmap 192.168.56.104 -p T:80,1521,7100-7102Starting Nmap 7.92 ( https://nmap.org ) at 2023-10-19 18:57 KST Nmap scan report for 192.168.56.104 Host is up (0.00044s latency). PORT STATE SERVICE 80/tcp open http 1521/tcp open oracle 7100/tcp open font-service 7101/tcp open elcn 7102/tcp open unknown MAC Address: 08:00:27:1B:83:A5 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds
8. nslookup 사용법 및 예제
KT의 인터넷망을 사용하고 있는데 특정 사이트를 접속할 수 없을 때 사용합니다. "dig" 명령어와 동일한 기능을 합니다.nslookup hostname[root@centos8 ~]# nslookup yesxyz.krServer: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: yesxyz.kr Address: 203.245.44.32
9. ping 사용법 및 예제
원격 호스트와 연결되지 않을 때 가장 먼저 확인하는 명령어입니다.ping [option] hostname -a: 통신이 되면 소리 출력 -c: 시도 횟수 -s: 데이터 크기 -i: 시간 간격(초) -w: 정해진 시간(초) -q: 종합 결과만 출력[root@centos8 ~]# ping -c 5 -i 2 192.168.56.104PING 192.168.56.104 (192.168.56.104) 56(84) bytes of data. 64 bytes from 192.168.56.104: icmp_seq=1 ttl=64 time=1.07 ms 64 bytes from 192.168.56.104: icmp_seq=2 ttl=64 time=1.00 ms 64 bytes from 192.168.56.104: icmp_seq=3 ttl=64 time=1.16 ms 64 bytes from 192.168.56.104: icmp_seq=4 ttl=64 time=1.30 ms 64 bytes from 192.168.56.104: icmp_seq=5 ttl=64 time=1.14 ms --- 192.168.56.104 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 8010ms rtt min/avg/max/mdev = 1.000/1.135/1.303/0.101 ms
10. route 사용법 및 예제
로컬 호스트에 등록된 라우팅 테이블을 출력해서 Gateway를 확인합니다.(Destination 0.0.0.0) "netstate -r" 명령어도 동일한 기능을 수행합니다.route -n hostname -n: 호스트명과 포트명을 숫자로 표시[root@centos8 ~]# route -nKernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 100 0 0 enp0s3 10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 192.168.56.0 0.0.0.0 255.255.255.0 U 101 0 0 enp0s8 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
11. ss 사용법 및 예제
socket을 사용하는 프로세스의 정보를 확인할 때 사용합니다.ss [option] : non listening socket 표시 -l: listening socket 표시 -a: 모든 socket 표시 -f: 소켓 유형 지정(unix, inet, inet6, link, netlink, vsock) ss -f unix -f inet -t: TCP socket 표시 ss -t src :9936 <- TCP 9936 포트 리스닝 socket 표시 ss -t dst :9936 <- 목적지 포트에 연결한 socket 표시 -u: UDP socket 표시 -w: RAW socket 표시 -x: Unix socket 표시 -p: socket 을 사용하는 프로세스의 정보를 표시 ss -ltp src :1521[root@centos8 ~]# ss -t -p![]()
12. tcpdump 사용법 및 예제
저도 사용해 본 적이 없는 명령어입니다. 네트워크 인터페이스(NIC)의 송수신 패킷 캡쳐할 수 있으며 네트워크 설정을 무작위 모드로 변경(`ifconfig NIC명 promisc`)한 후 TCP Dump를 이용하면 네트워크 내의 모든 패킷을 확인할 수 있습니다.tcpdump [option] [hostname] [port] -c 패킷수: 지정한 패킷 수만큼 덤프한 후 종료 -i NIC명: 지정한 NIC의 패킷만 덤프 -n: 호스트명을 숫자로 표시 -q: 간단한 형태로 출력 -X: 패킷의 내용을 16진수와 ASCII로 출력 -l: 표준출력을 버퍼에 저장 -w 파일명: 지정한 파일에 raw packets을 저장 -r 파일명: 덤프를 지정한 파일에서 읽음 host: 지정한 IP나 호스트의 패킷만 덤프 port: 지정한 포트의 패킷만 덤프 -vvv: 상세한 정보 출력호스트에 배치된 인터넷 사이트에 접속합니다.(wls와 ohs가 설치되어 클러스터링된 VM)[root@oel7u8 ~]# tcpdump -l -i enp0s8 port 80 | tee httpd.dattcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on enp0s8, link-type EN10MB (Ethernet), capture size 262144 bytes^C10 packets captured 10 packets received by filter 0 packets dropped by kernel
[root@oel7u8 ~]# cat httpd.dat![]()
13 tracepath 사용법 및 예제
tracepath [-n] [-m max_hops] [-p port] destination -n: 호스트명을 숫자로 표시 -m max_hops: 최대 홉수 지정(디폴트 30) -p port: 포트 지정
14. traceroute 사용법 및 예제
traceroute [option] hostname -I: icmp방식 -T: TCP방식 -U: UDP방식 -n: 호스트명 및 포트명을 숫자로 표시 -m max_hops: 최대 홉수 지정(디폴트 30) -w seconds: 응답 패킷 대기시간 지정 -q counts: hop당 쿼리하는 횟수 지정 -p port: 서비스 port 지정