2013-03-26 4 views
0

RAW 소켓을 만들고 소켓 옵션을 "IP_HDRINCL"로 설정했습니다. 나가는 UDP 패킷에 식별 필드를 설정하고RAW 소켓을 사용하여 IP 헤더의 식별 필드를 변경하는 경우의 문제

같은 것을 보내는 중입니다. 패킷이 발송 될 때이 필드가 임의의 숫자로 변경된다는 것을 알았습니다. 스니퍼 캡처에서 똑같은 것을 볼 수 있습니다.

다른 Windows XP 시스템에서 빌드하고 테스트 할 때 같은 코드가 정상적으로 작동합니다. 발신 패킷의 IP 헤더에있는 식별 필드는 내가 설정 한 것과 동일한 값을 가지고 있음을 알 수 있습니다.

잘 모르겠습니다. 통찰력이 있으면 알려주세요.

감사합니다,

레뉴는 IP_HDRINCL가 자동으로가는 IP 패킷의 특정 필드의 값을 설정할와

답변

0

원시 소켓을 발송하세요.

귀하의 경우, 패킷 ID는 0 일 때 겹쳐 쓰게됩니다. (당신의 사건?)

이 사건은 다음과 같습니다 (Raw Socket man page에서 촬영)는 답변

  +---------------------------------------------------+ 
      |IP Header fields modified on sending by IP_HDRINCL | 
      +----------------------+----------------------------+ 
      |IP Checksum   |Always filled in.   | 
      +----------------------+----------------------------+ 
      |Source Address  |Filled in when zero.  | 
      +----------------------+----------------------------+ 
      |Packet Id    |Filled in when zero.  | 
      +----------------------+----------------------------+ 
      |Total Length   |Always filled in.   | 
      +----------------------+----------------------------+ 
+0

감사합니다. 나는 0이 아닌 값으로 설정하고있다. 이 코드는 Windows 7 및 일부 Windows XP 컴퓨터에서 이상하게 작동합니다. 즉, 식별 필드에 나가는 패킷에 설정 한 값이 있음을 알 수 있습니다. 또한 같은 XP 기계에서 종종 때로는 잘 작동 식별 필드를 덮어 씁니다. – user2211410

+0

패킷의 크기를 시스템 MTU 크기로 유지하려고 시도 했습니까? id 필드는 IP 단편화에 사용되므로 어쩌면 OS가 그 단점을 보완합니다. 작은 (1500 바이트 미만의) 패킷을 보내고 무슨 일이 일어나는지보십시오. –

+0

IP 헤더, UDP 헤더 및 페이로드가 포함 된 63 바이트 크기의 패킷을 보내고 있습니다. 또한 IP 헤더의 조각화 오프셋은 0x4000으로 설정되며 조각화 플래그가 없습니다. 이상하게도 ID 필드는 처음에는 하나의 XP 시스템에서 변경되지 않았으며 갑자기 작동이 멈췄습니다. 즉, 난수로 작성되었습니다. – user2211410