웹사이트 검색

TCPflow - Linux에서 네트워크 트래픽 분석 및 디버깅


TCPflow는 Linux와 같은 Unix 계열 시스템에서 네트워크 트래픽을 분석하기 위한 강력한 무료 오픈 소스 명령줄 기반 도구입니다. TCP 연결을 통해 수신 또는 전송된 데이터를 캡처하고 프로토콜 분석 및 디버깅을 허용하는 유용한 형식으로 나중에 분석할 수 있도록 파일에 저장합니다.

추가 읽기: Linux에서 네트워크 사용량을 분석하기 위한 16가지 최고의 대역폭 모니터링 도구

실제로 유선 또는 저장된 파일에서 패킷을 처리하므로 tcpdump와 유사한 도구입니다. 이는 해당 제품에서 지원하는 것과 동일한 강력한 필터링 표현식을 지원합니다. 유일한 차이점은 tcpflow가 모든 TCP 패킷을 순서대로 정리하고 나중에 분석하기 위해 각 흐름을 별도의 파일(흐름 방향에 대한 파일)로 조립한다는 것입니다.

해당 기능 세트에는 압축된 HTTP 연결 압축 해제, MIME 인코딩 실행 취소, 사후 처리를 위한 타사 프로그램 호출 등을 위한 고급 플러그인 시스템이 포함되어 있습니다.

네트워크 패킷 흐름을 이해하고 네트워크 포렌식 수행을 지원하며 HTTP 세션의 내용을 공개하는 등 tcpflow에 대한 많은 사용 사례가 있습니다.

Linux 시스템에 TCPflow를 설치하는 방법

TCPflow는 주류 GNU/Linux 배포판의 공식 저장소에서 사용할 수 있으며, 표시된 대로 패키지 관리자를 사용하여 설치할 수 있습니다.

sudo apt install tcpflow	#Debian/Ubuntu
sudo yum install tcpflow	#CentOS/RHEL
sudo dnf install tcpflow	#Fedora 22+

tcpflow를 설치한 후 슈퍼유저 권한으로 실행할 수 있습니다. 그렇지 않으면 sudo 명령을 사용하세요. 활성 네트워크 인터페이스(예: enp0s3)에서 수신 대기합니다.

sudo tcpflow

tcpflow: listening on enp0s3

기본적으로 tcpflow는 캡처된 모든 데이터를 형식의 이름이 있는 파일에 저장합니다(타임스탬프와 같은 특정 옵션을 사용하는 경우 다를 수 있음).

sourceip.sourceport-destip.destport
192.168.043.031.52920-216.058.210.034.00443

이제 디렉토리 목록을 작성하여 어떤 파일에서 TCP 흐름이 캡처되었는지 확인하겠습니다.

ls -1

total 20
-rw-r--r--. 1 root    root     808 Sep 19 12:49 192.168.043.031.52920-216.058.210.034.00443
-rw-r--r--. 1 root    root      59 Sep 19 12:49 216.058.210.034.00443-192.168.043.031.52920

앞서 언급했듯이 각 TCP 흐름은 자체 파일에 저장됩니다. 위 출력에서 두 개의 반대 방향으로 tcpflow를 나타내는 세 개의 기록 파일이 있음을 알 수 있습니다. 여기서 소스 IP는 첫 번째 파일에 있고 대상 IP는 두 번째 파일에 있으며 그 반대도 마찬가지입니다.

첫 번째 파일 192.168.043.031.52920-216.058.210.034.00443에는 호스트 192.168.043.031(tcpflow가 실행된 로컬 호스트)에서 포트를 통해 전송된 데이터가 포함되어 있습니다. 52920, 포트 443을 통해 216.058.210.034(원격 호스트)을 호스트합니다.

두 번째 파일 216.058.210.034.00443-192.168.043.031.52920에는 216.058.210.034 호스트(원격 호스트)에서 443 포트를 통해 전송된 데이터가 포함되어 있습니다. Strong>을 사용하여 포트 52920을 통해 192.168.043.031(tcpflow가 실행된 로컬 호스트)을 호스트합니다.

또한 컴파일 방법, 프로그램이 실행된 컴퓨터, 모든 TCP 연결 기록 등 프로그램에 대한 정보가 포함된 XML 보고서가 생성됩니다.

눈치채셨겠지만, tcpflow는 기본적으로 현재 디렉터리에 기록 파일을 저장합니다. -o 옵션은 기록 파일이 기록될 출력 디렉터리를 지정하는 데 도움이 될 수 있습니다.

sudo tcpflow -o tcpflow_files
$ sudo ls -l tcpflow_files

total 32
-rw-r--r--. 1 root root 1665 Sep 19 12:56 157.240.016.035.00443-192.168.000.103.45986
-rw-r--r--. 1 root root   45 Sep 19 12:56 169.044.082.101.00443-192.168.000.103.55496
-rw-r--r--. 1 root root 2738 Sep 19 12:56 172.217.166.046.00443-192.168.000.103.39954
-rw-r--r--. 1 root root   68 Sep 19 12:56 192.168.000.102.00022-192.168.000.103.42436
-rw-r--r--. 1 root root  573 Sep 19 12:56 192.168.000.103.39954-172.217.166.046.00443
-rw-r--r--. 1 root root 4067 Sep 19 12:56 192.168.000.103.45986-157.240.016.035.00443
-rw-r--r--. 1 root root   38 Sep 19 12:56 192.168.000.103.55496-169.044.082.101.00443
-rw-r--r--. 1 root root 3159 Sep 19 12:56 report.xml

다음과 같이 -c 플래그를 사용하면 캡처된 데이터를 파일에 저장하지 않고 패킷 내용을 수신 즉시 stdout으로 인쇄할 수도 있습니다.

이를 효과적으로 테스트하려면 두 번째 터미널을 열고 ping을 실행하거나 인터넷을 탐색하세요. tcpflow에 의해 캡처되는 핑 세부 정보 또는 탐색 세부 정보를 볼 수 있어야 합니다.

sudo tcpflow -c

특정 포트(예: 포트 80(HTTP))의 모든 트래픽을 캡처할 수 있습니다. HTTP 트래픽의 경우 -c 스위치가 제거되면 stdout 또는 하나의 파일에서 HTTP 헤더와 콘텐츠를 모두 볼 수 있습니다.

sudo tcpflow port 80

특정 네트워크 인터페이스에서 패킷을 캡처하려면 -i 플래그를 사용하여 인터페이스 이름을 지정합니다.

sudo tcpflow -i eth0 port 80

표시된 대로 대상 호스트(허용되는 값은 IP 주소, 호스트 이름 또는 도메인)를 지정할 수도 있습니다.

sudo tcpflow -c host 192.68.43.1
OR
sudo tcpflow -c host www.google.com 

-a 플래그를 사용하여 모든 스캐너를 사용하여 모든 처리를 활성화할 수 있습니다. 이는 -e all 스위치와 동일합니다.

sudo tcpflow -a  
OR
sudo tcpflow -e all

특정 스캐너를 활성화할 수도 있습니다. 사용 가능한 스캐너에는 md5, http, netviz, tcpdemux 및 wifiviz가 포함됩니다(각 스캐너에 대한 자세한 정보를 보려면 tcpflow -H를 실행).

sudo tcpflow -e http
OR
sudo tcpflow -e md5
OR
sudo tcpflow -e netviz
OR
sudo tcpflow -e tcpdemux
OR
sudo tcpflow -e wifiviz

다음 예에서는 tcpdemux를 제외한 모든 스캐너를 활성화하는 방법을 보여줍니다.

sudo tcpflow -a -x tcpdemux 

TCPflow는 일반적으로 패킷을 캡처하기 전에 네트워크 인터페이스를 무차별 모드로 전환하려고 시도합니다. 표시된 대로 -p 플래그를 사용하여 이를 방지할 수 있습니다.

sudo tcpflow -p -i eth0

tcpdump pcap 파일에서 패킷을 읽으려면 -r 플래그를 사용하십시오.

sudo tcpflow -f file.pcap

-v 또는 -d 10 옵션을 사용하여 상세 모드를 활성화할 수 있습니다.

sudo tcpflow -v
OR
sudo tcpflow -d 10

중요: tcpflow의 한 가지 제한 사항은 현재 IP 조각을 이해하지 못하므로 데이터가 TCP 연결의 일부로 전송된다는 것입니다. IP 조각이 포함된 경우 제대로 캡처되지 않습니다.

자세한 내용 및 사용 옵션은 tcpflow 매뉴얼 페이지를 참조하세요.

man tcpflow 

TCPflow Github 저장소: https://github.com/simsong/tcpflow

지금은 여기까지입니다! TCPflow는 네트워크 패킷 흐름을 이해하고 네트워크 포렌식을 수행하는 데 유용한 강력한 TCP 흐름 레코더입니다. 사용해 보시고 의견을 댓글로 공유해 주세요.