2010-11-20 8 views
1

을 프로젝트의 일부로 보내고 HTTP 요청이 포함 된 IP 패킷을 Google에 보내려고합니다. Winpcap 라이브러리와 VC++를 사용하고 있습니다. 현재 TCP 세 방향 핸드 셰이 킹 패킷을 처리했지만 TCP ACK 패킷을 보내면 실제 HTTP 요청 패킷을 보내는 데 막혔습니다. wireshark를 사용하여 패킷을 캡처하면이 패킷은 "재조합 된 PDU의 TCP 세그먼트"로 표시됩니다. 프로토콜 열은 'HTTP'가 아닌 'TCP'입니다. 뭐가 문제 야? 이런 식으로 HTTP 패킷을 어떻게 보내겠습니까?원시 소켓을 사용하여 HTTP 요청을 보내고 WinPcap

답변

1

왜 WinPCap을 사용하여 패킷을 보내고 있습니까? 대신에 일반 소켓을 사용해야합니다. 더 좋게는 curl이나 Microsoft 자체의 WinInet 또는 WinHTTP API와 같은 HTTP 프로토콜을 구현하는 소켓 라이브러리를 사용하십시오.

2

반드시 잘못된 것은 아닙니다.

기본적으로 Wireshark는 TCP 데이터를 상위 레벨 프로토콜 처리기 (이 경우 전체 HTTP 요청 및 응답을 재구성하려고하는 핸들러)로 전달합니다. 그것은 순서의 최종 패킷 재 조립 메시지를 첨부하고, "어셈블 PDU의 TCP 세그먼트"로 다른 패킷 레이블 :

alt text

당신은 각각의 패킷을 검사하기 위해 재 조립 기능을 비활성화 할 수 있습니다 :

  • 편집 -> 환경 설정 -> 프로토콜 -> TCP
  • 의 선택을 취소
"subdissector는 TCP 스트림 재 조립 허용"
1

확장을 계획하고 있다면이 방법을 사용하기 전에 HTTP 프로토콜의 기초를 배우는 것이 좋습니다. 원시 소켓을 수행하고 요청을 내 보내면 혼란 스럽다. 일부 소스 코드를 읽으십시오.

하지만 실제로 pcap의 요점은 알 수 없습니다. 실제 소켓을 코딩하지 않으려면 Wininet 라이브러리를 사용할 수 있어야합니다. Wininet lib

그러나 원시 소켓을 코딩하려면 winsock을 사용하십시오. 일부는 HTTP와 TCP의 차이점을 이해하기 어렵습니다. HTTP는 TCP를 기반으로하므로 기술적으로 모두 동일합니다. TCP는 문자 그대로 수천 개의 응용 프로그램에 사용됩니다. 컴퓨터의 대부분의 연결은 TCP입니다.

HTTP 요청을 보내기 위해 pcap 프로그램을 사용하여 MITM 공격으로 연결을 가로 채려는 경우 Pcap에서 일부 프로그래밍을 배우게됩니다. 이에 대한 많은 자습서가 있습니다 (예 : this one).

추 신 : 초보자를위한 이해하기가 어렵 기 때문에 winsocks 자습서를 찾아보십시오. 또한 winpcap은 모든 시스템에서 지원되지는 않으며 설치할 때 통증이 생길 수 있습니다. 솔직히 winsock을 사용하는 것이 좋습니다. Wininet은 훨씬 더 많은 지원을하고 있으며, W2K + 빌드가 모두 wininet을 가지고 있다고 믿는다. 호환성을 위해 (나는 정말로 당신에게 문제라고 생각하지 않는다) wininet을 사용할 것이다. 또는 winsocks.

1

아마 \r\n으로 요청을 완료하지 않았을 것입니다.

GET/HTTP/1.0\r\n 문자열을 보내면 패킷을받지 못합니다.

GET/HTTP/1.0\r\n\r\n 문자열을 보내야합니다.

관련 문제