목적 : UDP 패킷을 생성해서 보내는것.

 

 

    SendSocket := socket(AF_INET, SOCK_RAW , IPPROTO_UDP); 
    if SendSocket = INVALID_SOCKET then
      raise exception.Create('Create Socket Error');
    ion := 1; //integer
1 :    rt := setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL,PAnsichar(@ion),sizeof(ion));   //패킷모두 생성가능하게.. 리턴값이 0 나옴.-그러나 패킷안보내짐 -_-);;

2:     rt :=  setsockopt(SendSocket, IPPROTO_UDP, IP_HDRINCL,PAnsichar(@ion),sizeof(ion));   //패킷모두 생성가능하게... 리턴값이 -1 나옴.. 그러나 패킷은 보내짐(단 Eth_hdr,IP_hdr이 이미 생성되어진후 내가 보내는 패킷을 뒤에 붙여서 패킷이 늘어나게 되어버림 -_-);;

  
   

소켓을 생성후에

 

//packet 에 모든 헤더정보를 입력하였다고 가정

//패킷에 모든 전송데이터 입력완료/체크섬 완료

 

// SendTo 에보면 TSockAddr 의 정보를 넣게 되어있는데요...

 

  sa2.sin_family := AF_INET;
  sa2.sin_port := htons(12216);
  sa2.sin_addr.s_addr := inet_addr('192.168.0.125');

 

  sendErr := Sendto(SendSocket,packet,sizeOf(Packet),0,sa2,sizeof(sa2));

 

이렇게 넣고 보내면 -1이 리턴되어 에러가 납니다. (옵션이 IPProto_IP 일때, IP_Proto_UDP일때는 안납니다.다만 위에서 말했듯이 기본패킷이 생성되어진후 더해집니다.)

 

제가 보기엔 패킷생성옵션이 잘못된거 같은데..  어떤옵션을 줘야될까요? (그리고 아래에 TSocketAddr은 맞게 쓴걸까요?;;)