본문 바로가기
Technical/Network

tcpdump 리눅스 설치 및 명령어

by 잠적준비중 2022. 6. 27.

tcpdump는 CLI환경에서 패킷을 확인하기 위한 소프트웨어입니다.

GUI가 지원 되는 환경이라면 와이어샤크를 쓰지만 CLI환경에서는 주로 tcpdump를 많이 사용합니다.

네트워크 장비 및 보안 장비의 cli환경에서 tcpdump를 사용하는 장비들도 많습니다.

 

test 환경 : centos7.9

1. 패키지 설치

yum -y install tcpdump

위 명령어로 tcpdump를 설치합니다.

 

[root@localhost ~]# yum -y install tcpdump
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirror.anigil.com
 * epel: hkg.mirror.rackspace.com
 * extras: mirror.anigil.com
 * updates: mirror.anigil.com
Resolving Dependencies
--> Running transaction check
---> Package tcpdump.x86_64 14:4.9.2-4.el7_7.1 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package               Arch                 Version                            Repository          Size
========================================================================================================
Installing:
 tcpdump               x86_64               14:4.9.2-4.el7_7.1                 base               422 k

Transaction Summary
========================================================================================================
Install  1 Package

Total download size: 422 k
Installed size: 1.0 M
Downloading packages:
tcpdump-4.9.2-4.el7_7.1.x86_64.rpm                                               | 422 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 14:tcpdump-4.9.2-4.el7_7.1.x86_64                                                    1/1
  Verifying  : 14:tcpdump-4.9.2-4.el7_7.1.x86_64                                                    1/1

Installed:
  tcpdump.x86_64 14:4.9.2-4.el7_7.1

Complete!
[root@localhost ~]#

 

2. 명령어 입력

tcpdump는 많은 명령어가 있지만 많이 사용하는 인터페이스에서의 패킷 캡처를 해보겠습니다.

 

ifconfig 를 입력하여 캡처할 인터페이스를 선택합니다.

 

[root@localhost ~]# ifconfig
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.5.191  netmask 255.255.255.0  broadcast 192.168.5.255
        inet6 fe80::a6d0:d8e3:8499:99d8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:9f:75:18  txqueuelen 1000  (Ethernet)
        RX packets 128403  bytes 172231937 (164.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 56679  bytes 4525289 (4.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:bc:a0:dc  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost ~]#

 

빨간색으로 표시한 ens192 인터페이스의 패킷을 캡쳐하겠습니다.

tcpdump -i ens192

 

[root@localhost ~]# tcpdump -i ens192
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
^C22:51:51.920333 IP localhost.localdomain.ssh > 192.168.4.51.14718: Flags [P.], seq 272688883:272689091, ack 4199069358, win 261, options [nop,nop,TS val 2540445 ecr 11274648], length 208

1 packet captured
8 packets received by filter
0 packets dropped by kernel
[root@localhost ~]#

 

아마 위 명령어를 그대로 입력하시면 엄청나게 많은 패킷이 캡쳐될 것입니다.

 

우리가 원하는 패킷을 캡처하기 위해서는 port번호,소스ip,목적지ip,호스트ip 등 여러 조건으로 캡처를 합니다.

아래는 tcpdump 명령어 예시입니다.

tcpdump -i ens192 port 443 : 인터페이스 ens192로 통신하는 패킷 중 포트번호가 443인 것들을 캡처합니다.

tcpdump -i ens192 dst 8.8.8.8 : 인터페이스 ens192로 통신하는 패킷 중 목적지 ip가 8.8.8.8인 패킷들은 캡처합니다.

tcpdump -i ens192 src 192.168.5.150 : 인터페이스 ens192로 통신하는 패킷 중 소스 ip가 192.168.5.150인 패킷들을 캡처합니다.

 

이 외 and 및 or 조건문을 추가할 수 있습니다.

tcpdump -i ens192 dst 8.8.8.8 and src 192.168.5.150 : 인터페이스 ens192로 통신하는 패킷 중 목적지ip가 8.8.8.8인 패킷 중 소스ip가 192.168.5.150인 패킷들을 캡처합니다.

tcpdump -i ens192 dst 8.8.8.8 or src 192.168.5.150 : 인터페이스 ens192로 통신하는 패킷 중 목적지ip가 8.8.8.8인 패킷과 소스ip가 192.168.5.150인 패킷들을 캡처합니다.

 

tcpdump에 많은 명령어 들이 있으니 필요하신 것들을 확인하고 사용하시면 cli환경에서도 충분이 패킷 분석이 가능합니다.

 

3.그외 명령어

any  : 모든 패킷들을 캡처

-c  : 카운터 명령어, 앞에 숫자 입력 시 숫자를 입력한 만큼의 패킷만 캡처하고 tcpdump 종료 (-c 10)

-A : ASCll 로 출력

-n : 도매안 네임 미확인

tcp : tcp 패킷 캡처

udp : udp 패킷 캡처

net : 특정 네트워크 범위함 캡처 (tcpdump -i ens192 net 192.168.0.0/24)

portramge : 특정 포트 범위를 지정하여 캡처 ( tcpdump portrange 100-200)

host : 특정 호스트의 패킷 캡처 (tcpdump host 192.168.1.100)

-w : 패킷 캡처를 저장 (tcpdump -r tcpdump.txt)

-tttt : tcpdump의 타임 스태프 출력 (2022-06-27 23:13:06.791246 로 출력)

ipv6 : ipv6 패킷만 캡처

icmp : icmp 캡처

 

 

댓글