2010-08-15 7 views
1

Winsock으로 UDP 패킷을 보내고받는 C++의 Windows 용 UDP 프록시 응용 프로그램을 프로그래밍하고 있습니다. 문제는 데이터와 UDP 및/또는 IP 헤더뿐만 아니라 전체 패킷으로 작업해야한다는 것입니다. IP_HDRINCL (철자가 틀릴 수 있음) 원시 소켓 시도한 있지만 여전히 패킷에서 일부 정보를 잘라냅니다. winsock에서 불가능하다면 라이브러리를 만들 수 있습니까?전체 UDP 패킷 수신

수신 패킷
+1

아마 당신은 당신이이 당신이 준 API를 제공하지 않는 필요한 다른 정보가 무엇인지 설명 할 수있다. –

+0

winsock을 사용하면 일반적으로 일부 구조체의 헤더 정보를 사용하여 데이터 만 전달합니다. 원시 소켓을 사용하면 메모리가 작동하면 이더넷 헤더가 제거됩니다. 난 절대적으로 평범하고, 전체적이고 완전한 패킷을 원한다. – Chroma

답변

3

, WinPCAP 당신이 더 많은 모든 작업을 수행 할 것이며, 인터페이스에 도착하는 모든 패킷을 캡처하는 방법을 보여줍니다 샘플 코드 here이있다.

+0

WinPCAP을 사용하면 원하는 패킷을 보낼 수 있지만 bind()와 모든 것과 함께 winsock과 비슷한 방법으로 패킷을받을 수 있습니까? WinPCAP을 사용하면 컴퓨터의 포트로 들어오는 모든 패킷을 받아야한다고 생각했습니다. – Chroma

+0

위의 샘플 코드 링크에서 두 번째 예를 살펴보고 필터를 설정하는 방법을 보여줍니다. 그러면 관심있는 패킷을 수신 할 수 있습니다. bind() 등을 사용할 필요가있다. 당신은 단지 원시 패킷 데이터가 들어 오게됩니다. –

+0

저는이 분야의 컴퓨터에 익숙하지 않지만 컴퓨터에있는 모든 패킷을받지 못하고 단지 필터링 만하는 것보다 훨씬 느립니다. – Chroma

0

다음은 몇 가지가 창에서 패킷을 필터링하는 것입니다 : 윈도우 7, 2008 또는 상단에

  1. WinDivert 무료 오픈 소스 프로젝트 작품. 네트워크 계층.
  2. WinpkFilter 3.0 상업용, Windows XP 이상. 데이터 링크 계층
  3. pcausa, 상업. 데이터 링크 계층
  4. Windows Filtering Platform Packet Modification Sample 샘플 WinDivert에서 사용하는 설명 선 드라이버를 만들려면 커널 드라이버를 구현해야합니다. 네트워크 계층.
관련 문제