//폼시작시 콜백으로 패킷캡쳐 시작./////////////////////////

procedure TMainform.FormCreate(Sender: TObject);
var
  I : integer;
  Dev: ppcap_if_t;
  AllDevs: ppcap_if_t;
  ErrBuf: array[0 .. PCAP_ERRBUF_SIZE - 1] of Char;
  rt : integer;
begin
  //아답터 가져오기..
  if AdapterNames = nil then exit;
  AdapterNames.Capacity := 10;
  i := pcap_findalldevs(@AllDevs, ErrBuf);
  if i <> 0 then // if error occured
  begin
    memlog.Lines.Add(ErrBuf);
    exit;
  end;
  Dev := AllDevs;
  while Dev <> nil do
  begin
    AdapterNames.Add(Dev^.name);
    Dev := Dev^.next;
  end;
  FAdapterName := pChar(AdapterNames.Strings[0]);
  pcap_freealldevs(AllDevs);

 //아답터 엔드~

 

//pcap열기

  FillChar(errbuf,PCAP_ERRBUF_SIZE-1,'#0');
  fp := pcap_open_Live(FAdapterName,65536,1,1000,errbuf);
  if (fp = nil) then
  begin
    memlog.Lines.Add(errBuf);
    exit;
  end;

 //캡쳐 콜백으로 연결
  rt := pcap_loop(fp,0,@Packet_handler,0);

 

end;

 

//패킷보내는 함수////////////////////////////////////////////////

procedure TMainform.SendPacket();

const
  UDP_BLOCK_DATA_SIZE = sizeof(ETH_HDR) + sizeof(IP_HDR) + sizeof(UDP_HDR) + 20;
var
  i : integer;
  packet : array[0..61] of Ansichar;
  BufferStr: AnsiString;
  Size : integer;

  CH : byte;
begin
  FAdapterName := '';
    //Input 2
  bufferStr := '7C 2E 0D 00 44 8F 6C F0 49 02 E5 C4' + ' 08 00 ' +                         {//DestMac/sourceMac/Type}
               '45 00 00 30 C8 D9 00 00 80 11 ' + 'F0 12' + ' C0 A8 00 03 C0 A8 00 7D ' +  {//IP정보 + 체크섬 + sorceIP/desinationIP}
               '2F B8 26 B6 00 1C ' + 'BC CE ' +                                           {//UDP정보 + 체크섬}
               '10 14 59 6E 00 00 00 00 00 26 00 00 01 00 00 00 00 00 00 00';              {//UDP데이터}

 //패킷을 버퍼에 넣는다.

  Size := 0;
  while BufferStr <> '' do
  begin
    i := Pos(' ', BufferStr);
    if i = 0 then i := Length(BufferStr) + 1;
    Ch := StrToInt('$' + Copy(BufferStr, 1, i - 1));
    packet[Size] := AnsiChar(Ch);
    BufferStr := Copy(BufferStr, i + 1, Length(BufferStr) - i);
    inc(Size);
  end;

//패킷보낸다.

  if pcap_sendpacket(fp,packet,size) <> 0 then
  begin
    memlog.Lines.Add(format('Error Sending Packet: %s',[pcap_geterr(fp)])); //에러보이기
  end;

end;

 

이렇게 할려고 하고 있습니다만....

패킷을 저렇게 구분하지 않고, 각 헤더값으로 구분해서 보낼려고 하는데 각 헤더값으로 구분하게되면 이상하게 저 값이 안나오더라구요 -_-;

각 헤더값으로 변경할때 어떻게 변환해야될지 난감합니다.(그로인헤 체크섬도 안맞구요 ㅠㅠ)

저걸 어떻게 넣어야될가요?;;