필자는 리눅스 호스트의 모든 인터페이스에서 TCP 데이터 (TCP 헤더가 아닌)를 표시하는 간단한 방법을 원합니다.
예를 들어, 나는 마술적인 명령을 원한다.
magic_commmand_I_want port=1234
내 컴퓨터에서 포트 1234를 수신하는 서버가 있고 다른 누군가가 다음을 수행하면 :
echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a Host/port
그러면 마법의 명령이 출력됩니다 :
hello
나는 "tcpdump", "Ethereal", "tethereal", "tshark"및 다른 것들을 시도했지만 어떻게 얻었는지는 분명하지 않습니다.
그렇습니다. 아마도 유닉스 명령을 파이프 라인으로 묶어서 처리 할 수는 있지만 다음에 기억하기 쉽지는 않습니다. :)
이 작업을 수행하는 정확한 명령 줄의 간단한 예제가 있다면 그게 내가 원하는 것입니다.
업데이트 :
의견에서 Michal이 지적한대로 : tcpflow 버전 1.3부터 스캐너 이름을 지정하는 데 -e 옵션이 사용됩니다. 따라서 "잘못된 스캐너 이름 '8983'"오류가 인쇄됩니다. 올바른 명령은 다음과 같습니다.
Sudo tcpflow -i any -C -J port 1234
(또한 -J
가 최신 릴리스에서 -g
로 변경되었습니다)
" tcpflow "로 나를 가리켜 주신 Yves에게 감사드립니다. 다음은 명령 행입니다.
tcpflow -i any -C -e port 1234 # as root, or with Sudo
이것은 내가 원하는 모든 것을 해낸다.
"-C
"는 파일 대신 콘솔에 덤프하도록 지시합니다. "-e
"는 색상을 사용하여 클라이언트 -> 서버 및 클라이언트 -> 클라이언트가 시각적으로 구별됩니다.
나는 단순히 tcpflow를 설치했다.
Sudo apt-get install tcpflow
socat은 당신이 요구하는 도구입니다. 프록시 역할을 할 수 있습니다.
$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello
애플리케이션은 1234에 직접 연결하는 대신 포트 4444를 연결해야합니다.
-v 옵션은 socat이 표준 오류 (stderr)에서 수신하는 모든 것을 인쇄합니다.
최신 정보:
시스템에서 socat을 사용할 수 없다면 netcat을 통해 socat을 계속 에뮬레이션 할 수 있습니다.
$netcat -l -p 4444 | tee output_file | netcat localhost 1234
주의 사항 :이 옵션은 단방향입니다. 두 번째 netcat 인스턴스는 서버의 모든 응답을 표준 출력으로 인쇄합니다. 그래도 다음 작업을 수행 할 수 있습니다.
$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
시도 Wireshark . Linux와 Windows를 모두 대상으로하는 탁월한 프로토콜 분석기입니다.
tcpflow는 당신이 원하는 것입니다. 맨 페이지에서 추출 :
기술
tcpflow는 TCP connections (flows)의 일부로 전송 된 데이터를 캡처하고 프로토콜 분석에 편리한 방식으로 데이터를 저장하는 프로그램입니다 tcpdump (4)와 같은 프로그램은 유선에 표시된 패킷의 요약을 보여 주지만, 실제로 전송되는 데이터는 저장하지 않습니다. 대조적으로, tcpflow는 실제 데이터 스트림을 재구성하고 나중에 분석 할 수 있도록 각 플로우를 별도의 파일에 저장합니다. tcpflow는 TCP 시퀀스 번호를 인식하고 재전송 또는 순서가 잘못된 배달과 관계없이 데이터 스트림을 올바르게 재구성합니다.tcpflow는 캡처 된 모든 데이터를 양식 이름을 가진 파일에 저장합니다.
192.168.101.102.02345-010.011.012.013.45103
위 파일의 내용은 호스트 192.168.101.102 포트 2345에서 호스트 10.11.12.13 포트 45103으로 전송 된 데이터입니다.
응용 프로그램과 서버 간의 연결을 설정하십시오. 연결이 시작되어 실행 중일 때 tcpflow는 데이터를 캡쳐 할 수 있습니다 예 :
$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo
모든 데이터는 127.000.000.001.48842-127.000.000.001.05555라는 파일에 저장됩니다.
-Cs 옵션을 사용하여 이것을 표준 출력으로 리디렉션 할 수 있습니다. 수동 페이지를 읽고 표현식으로 재생하여 tcpflow에서 캡처 할 paquets를 조정하십시오.
ngrep
은 매우 좋았습니다. BPF 문자열과 선택적 문자열을 사용하여 패킷 내에서 검색 한 다음 패킷 내용을 매우 유용한 형식으로 화면에 덤프합니다. 또한 선택적으로 나중에 Wireshark에서 더 자세히 조사 할 수있는 pcap_dump 파일로 덤프합니다.
Chaosreader 를 살펴보십시오. 비록 당신이 요구하는 것보다 조금 더 다르지만, 아마 당신이 원하는 것을하기 위해 코드를 수정할 수 있습니다.