문제

내 기계의 모든 들어오는 HTTP 패킷을 캡처하고 싶습니다. 그렇게하기 위해 나는 WinpCap 래퍼 인 SharpPCap을 사용하고 있습니다.

SharpPCap은 매우 잘 작동하지만 TCP 패킷을 캡처하며 원하는 작업을 수행하기에는 너무 낮습니다. 이 모든 TCP 패킷에서 HTTP 요청/응답을 어떻게 쉽게 얻을 수 있는지 아는 사람이 있습니까?

감사

도움이 되었습니까?

해결책

SharpPCap은 이미 Wireshark와 동일한 방식으로 패킷을 캡처 할 수 있습니다 (GUI가 아닌 코드로만). 또한 직접 구문 분석하거나 공통 .pcap 파일 형식으로 드라이브에 버릴 수 있습니다.

캡처를 구문 분석하는 단계는 다음과 같습니다.

  • 인터페이스를 선택하십시오
  • 무차별 모드로 연결을 엽니 다
  • while 루프 또는 이벤트 콜백을 사용하여 캡처를 시작합니다.
  • 원시 패킷을 원하는 유형으로 구문 분석하십시오.

.pcap 덤프 파일을 읽고 있다면 오프라인 캡처 리더를 호출하는 것 외에는 프로세스가 거의 동일합니다. 인터페이스를 선택할 필요가 없으며 무차별 모드를 설정할 필요가 없습니다. Wireshark, TCPDump 및 대부분의 다른 PCAP 프레임 워크가 사용하는 모든 표준 필터는 SharpPCap에서 지원됩니다. 이를 참조하려면 tcpdump man을 확인하십시오.

현재 HTTP를 직접 구문 분석 할 수있는 지원은 없지만 TCP 패킷을 구문 분석하는 것은 정말 쉽습니다.

원시 패킷을 받으면 (구문 분석되지 않음) 이렇게하십시오.

TCPPacket packet = TCPPacket.GetEncapsulated(rawPacket);

Packet.net (SharpPCap의 별도 및 포함 구성 요소) 파서는 통신이 VPN, PPOE 또는 PPP에 의해 캡슐화 되더라도 TCP 부분을 직접 꺼낼 수 있습니다.

TCPPACKET이 구문 분석 한 후에는 Packet.PayLoadBytes 페이로드에 대한 페이로드에 적절한 텍스트 형식으로 변환 할 수있는 원시 바이트의 HTTP 헤더가 포함되어야하는 바이트 배열의 페이로드 비트 (HTTP 헤더가 UTF-8을 사용하는지 확실하지 않습니다. 또는 해당 레벨에서 인코딩). HTTP 헤더를 구문 분석 할 수있는 무료 도구/라이브러리가 많이 있어야합니다.


TCP에서 HTTP 패킷을 추출하려면 :

연결이 들어올 때 연결의 TCP 패킷을 수집해야하며 데이터가 단편화 된 경우 (1500 바이트 이상) 메모리의 부품을 다시 조립해야합니다. 시퀀스/승인 번호를주의 깊게 추적 해야하는 순서로 어떤 부분이 필요한지 확인합니다.

스택의 훨씬 낮은 부분으로 작업하고 수동으로 연결을 다시 조립하기 때문에 SharpPCAP로 수행하는 것이 사소한 일입니다.

Wireshark는 C에서 이것을 달성하는 방법에 대한 흥미로운 기사를 가지고 있습니다.

현재 SharpPCap은 TCP 페이로드 구문 분석을 지원하지 않습니다.


SharpPCap을 사용하는 방법에 대한 팔로우하기 쉬운 예제를 찾고 있다면 소스 트리를 다운로드하고 포함 된 예제 프로젝트를 살펴보십시오. 또 한있다 CodeProject의 SharpPCap에 대한 튜토리얼.

더 많은 질문이 있거나 프로젝트에 기능 요청을하려면 Sourceforge 프로젝트에 자유롭게 게시하십시오. 그것은 죽지 않았으며 계속 적극적으로 발전하고 있습니다.

참고 : Chris Morgan은 프로젝트 책임자이며 SharpPCap/Packet.net의 개발자 중 하나입니다.

업데이트 : 코드 프로젝트의 튜토리얼 프로젝트는 이제 현재 API와 일치하도록 최신입니다.

다른 팁

TCP 스트림을 HTTP 요청/응답 쌍으로 디코딩하는 것은 사소한 일입니다. Wireshark와 같은 도구는 상당한 노력으로이를 수행합니다.

나는 Ruby를위한 Wireshark 래퍼를 썼습니다 (당신이 도움이되지는 않습니다). 그러나 그것을 쓰기 전에 Tshark (Wireshark의 명령 줄 버전)를 사용해 보았습니다. 그것은 내 문제를 해결하지 못했지만 그것은 당신에게 효과적 일 수 있습니다. 방법은 다음과 같습니다.

패킷을 캡처하여 PCAP 파일로 씁니다 (SharpPCap은 아마도이를 수행 할 수있는 방법이있을 것입니다). 어느 시점에서 캡 파일을 닫고 다른 파일을 시작한 다음 이전 One에서 HTTP 트래픽을위한 필터와 함께 Tshark를 실행하고 PDML 형식의 출력을 원한다는 플래그. 이것은 XML 형식으로, 모든 HTTP 필드의 값을 다양한 형식으로 포함하는 System.xml 도구와 쉽게 구문 분석 할 수 있습니다. C# 코드를 작성하여 Tshark를 스폰하고 stdout 스트림을 XML 리더로 파이프하여 패킷을 Tshark에서 나오면서 나올 수 있습니다. 대형 캡처 파일의 PDML 출력이 매우 빨리 미치게 될 수 있으므로 Dom Parser를 사용하지 않는 것이 좋습니다.

귀하의 요구 사항이 복잡하지 않으면 (저와 마찬가지로) 이것이 필요한 전부 일 수 있습니다.

솔루션에 가깝다고 생각합니다. HTTP 트래픽에서 TCP 패킷이있는 경우 HTTP 요청/응답을 재건하려면 TCP 페이로드 만 추출하면됩니다. 이것 좀 봐 그래서 진입 가능한 방법으로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top