2014-11-28 6 views
0

HTTP 패킷을 캡처 중입니다. 예상대로 패커 중 일부가 너무 커서 패킷 하나가 너무 많아서 문제가됩니다. 패킷을 어떻게 병합 할 수 있습니까? 나는 구조를 들여다 보았고 아무것도 튀어 나오지 않았다. 내가 찾은 한 가지는 함께 속해야하는 모든 패킷에 대해 Window 크기가 동일하다는 것입니다.어떻게 'split/partial'패킷을 libpcap과 병합 할 수 있습니까?

나는 또한 모든 패킷 데이터를 축적하는 것으로 간주하고 HTTP 헤더 정보를 사용하여 구문 분석하지만 더 나은 방법이 있어야합니다. 내가 보는 패킷 중 일부가 거부되어 다시 요청 될 수 있습니다.

저는 C 라이브러리를 사용하고 있습니다. 코드는 좋지만 라이브러리 레벨에서 이들을 병합하는 방법에 더 관심이 있습니다.

답변

1

나는 또한 단지 모든 패킷 데이터를 축적하고, HTTP 헤더 정보를 사용하여 구문 분석,하지만

아니, 존재하지 않는 더 나은 방법을이 있어야한다 생각했다.

"패킷"으로 "HTTP 요청 및 응답"을 의미하는 경우 HTTP 요청 또는 응답이 시작되거나 끝나는 시점을 결정하는 유일한 방법은 HTTP 헤더를 구문 분석하여 해당 빈 줄을 찾는 것입니다. HTTP 헤더의 끝을 나타내고 Content-Length : 헤더는 HTTP 엔터티 본문의 길이를 나타냅니다.

TCP는 그 위에 실행되는 HTTP와 같은 프로토콜에 바이트 스트림 서비스를 제공합니다. 그것은 패킷으로 그 바이트 스트림을 구분하는 NO 서비스를 제공하므로 TCP의 상단에 패킷이 시작 또는 끝 표시하기 위해 TCP 헤더에 아무것도가 없습니다.

정확히 Wireshark가 HTTP 요청과 응답을 재조합하는 방법입니다.

나는보고있는 일부 패킷을 거부하고 다시 요청할 수 있습니다.

여기서 어떻게 관련이 있습니까?

+0

필자는 실패한 패킷을 볼 것이라고 생각했지만 읽은 후에는 잘못 가정 한 것 같습니다. 답장을 보내 주셔서 감사합니다. 지금 누적 및 HTTP 구문 분석을 시작합니다. – MichaelICE

+0

"실패"는 어떤 의미입니까? HTTP 계층에서 실패한 요청은 네트워크 계층에서 성공하지 못한 요청을 볼 수 있으며 요청이 시간 초과 (즉, 서버의 응답 없음)로 실패하면 요청을 확인할 수 있습니다. 실패한 요청에 대한 응답은 HTTP 응답이됩니다.이 상태는 404와 같은 상태가되며 [이 페이지] (http://www.bluegg.co.uk/404)와 같은 엔터티 본문이됩니다.). –