tcpreplay에서 보낸 패킷이 서버에 표시되지 않는 이유는 무엇입니까?

tcpreplay에서 보낸 패킷이 서버에 표시되지 않는 이유는 무엇입니까?

pcap 파일을 HTTP 서버로 재생하려고 합니다. 그 전에 tcpreplay를 올바르게 사용하고 있는지 수동으로 확인하려고 합니다.

netcat -l 12345특정 포트에서 듣기 시작했습니다 . "서버"라고 부르겠습니다. 다른 컴퓨터에서는 tcpdumpfile 의 특정 포트에 대한 대상이 있는 모든 트래픽을 캡처하기 위해 실행했습니다 dummy.pcap. 그런 다음 클라이언트 컴퓨터에서 netcat을 실행하고 "서버"에 연결하고 여러 메시지를 보냅니다. 결과 pcap을 확인했는데 tshark패킷이 캡처되었음을 보여줍니다.

서버에서 netcat을 다시 시작했고 클라이언트에서는 tcpreplay를 시작했습니다.

tcpreplay -d 5 -i eth0 -t dummy.pcap

그러나 서버의 netcat 콘솔에는 아무 것도 나타나지 않습니다. "서버"에서 tcpdump를 실행하려고 시도했는데 패킷이 수신되었다는 메시지가 표시됩니다.

netcat 콘솔에 패킷이 표시되지 않는 이유는 무엇입니까?

답변1

TCPreplay는 서버에서 트래픽을 재생하지만 TCP 프로토콜의 특성으로 인해 실제로 서버와 '통신'하지 않습니다. 따라서 기본적으로 서버는 TCP 패킷을 수신하지만 재생이 적절한 핸드셰이크를 완료하지 않기 때문에 실제 TCP 연결을 설정하지 않습니다. 이것이 netcat에 TCP 세션이 표시되지 않는 이유입니다.

내 경험에 따르면 이러한 종류의 tcpdump는 분석에만 유용하며 일련의 명령/데이터 재생산에 관심이 있는 경우 프로토콜에 맞는 도구를 찾아야 합니다(제 경우에는 사용자 정의 클라이언트 작성과 관련됨).

보다http 상호 작용을 기록하고 재생하는 방법은 무엇입니까?

tcppreplay에서위키:

서버로 트래픽 보내기

문제

pcap 캡처가 있고 다른 서버에서 해당 트래픽을 재생하고 싶습니다.

해결책

첫째, 이는 ICMP 및 UDP 트래픽에서만 작동합니다. Tcpreplay는 TCP 스트림의 동기화/승인 번호를 동기화하지 않기 때문에 서버에서 TCP 트래픽 전송을 지원하지 않습니다.

즉, 대상 서버의 주소와 일치하도록 대상 IP 및 MAC 주소를 변경해야 합니다. 이 경우 대상 서버 IP는 10.10.1.1이고 MAC 주소는 00:01:02:03:04:05라고 가정합니다.

그리고 그들의자주하는 질문:

=== tcpreplay는 서버로의 트래픽 전송을 지원합니까? === '서버'가 포트에서 수신 대기하는 데몬(Unix) 또는 서비스(Windows)를 의미한다면(웹 또는 메일 서버가 일반적인 예임) 아마도 그렇지 않을 것입니다. 가장 큰 문제는 tcpreplay가 TCP와 같은 일반적인 프로토콜의 상태를 이해하지 못한다는 것입니다. 이는 유효한 TCP 세션을 생성하기 위해 동기화/승인을 동기화할 수 없음을 의미합니다.

관련 정보