내가 아는 한, HTTP 요청과 응답은 TCP 연결을 구축합니다. GUI가 없는 서버에서 웹 애플리케이션을 디버깅하기 위해 이러한 TCP 흐름을 구별 가능한 단일 엔터티(동일한 색상, 파일, 데이터베이스 레코드 등)로 캡처할 수 있기를 원합니다.
tcpdump
IP 패킷은 정렬이나 재조립 없이 도착하거나 출발할 때만 저장할 수 있습니다. tcpflow
한 단계 더 나아가 TCP 연결을 별도의 파일로 재조립하지만 송신 및 수신 스트림을 별도의 파일에 넣으면 빠른 디버깅이 짜증납니다. 관련 파일을 병합하기 위해 스크립트나 코드 한 줄을 작성할 수 있다고 확신하지만 tcpflow
이 작업에 대한 래퍼가 도입될 수도 있다고 생각합니다 tcpflow
. 또한 게으르고 더 깨끗한 솔루션을 찾고 있습니다.
어떤 제안이라도 대단히 감사하겠습니다.
답변1
pcap 파일을 데스크탑에 복사(또는 스트리밍)하고 패킷 분석을 위해 Wireshark GUI를 사용할 수 있습니다. GUI 외에도 tshark
명령(Wireshark에 포함됨)이 있습니다. 스트림 번호가 주어지면 다음을 사용하여 요청과 응답을 단일 출력으로 결합할 수 있습니다.
$ tshark -q -r http.pcapng -z follow,tcp,ascii,1
===================================================================
Follow: tcp,ascii
Filter: tcp.stream eq 1
Node 0: 10.44.1.8:47833
Node 1: 178.21.112.251:80
77
GET / HTTP/1.1
User-Agent: curl/7.37.0
Host: lekensteyn.nl
Accept: */*
356
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.4.7
Date: Sun, 29 Jun 2014 10:24:34 GMT
Content-Type: text/html
Content-Length: 160
Connection: keep-alive
Location: https://lekensteyn.nl/
<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.4.7</center>
</body>
</html>
===================================================================
tshark
자세한 내용은 매뉴얼 페이지를 참조하십시오. 기본적으로 -q
일반 패킷 표시를 억제하고 -r http.pcapng
캡처 파일을 선택합니다 -z follow,...
.TCP 스트림을 따르세요그래픽 사용자 인터페이스에서. 안타깝게도 각 스트림에 대해 이 명령을 반복해야 하는데 이는 이상적이지 않습니다.
Wireshark GUI에 대한 연결을 스트리밍하려면 다음 명령을 사용할 수 있습니다.
ssh you@server 'tcpdump -w - "tcp port 80"' | wireshark -i - -k
이것이 여전히 원하는 것이 아니라면 프록시를 설정하고 해당 프록시를 통해 모든 것을 기록하는 것을 고려할 수 있습니다.