Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > сформировать и отправить tcp пакет


Автор: ScoL 16.3.2008, 21:08
Здравствуйте форумчане вот возникла необходимость сформировать и отправить tcp пакет, погуглив наше код он был предназначен для ddos атаки, убрав цикл который отправлял несколько пакетов, обьявив некоторые переменные получил код приведенный ниже, но он все равно выдает ошибки, код использует winsock2,кому не трудно посмотрите пожалуйстая,и если не трудно сделайте комментарии основных моментов: как формируется и отправляется пакет.Заранее спасибо. smile 
Код

  iph = record
    ip_verlen: byte; 
    ip_tos: byte;
    ip_len: word; 
    ip_id: word; 
    ip_offset: word; 
    ip_ttl: byte; 
    ip_protocol: byte; 
    ip_checksum: word; 
    ip_saddr: longword; 
    ip_daddr: longword; 
  end; 

  tcph = record 
    th_sport: word;
    th_dport: word;  
    th_seq: longword; 
    th_ack: longword; 
    th_len: byte; 
    th_flags: byte; 
    th_win: word; 
    th_checksum: word; 
    th_upr: word; 
  end; 

var
  Form1: TForm1;
  ipHeader :iph;
  TCPHeader: tcph;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
WSAdata: TWSAData;
FSocket: TSocket;
port,op,nTimeOver,i : Integer;
begin
WSAStartup(MAKEWORD(2,2),WSAdata) ;
 FSocket:=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,nil,0,WSA_FLAG_OVERLAPPED);
 op:=1;
setsockopt(FSocket,IPPROTO_IP,IP_HDRINCL,@op,sizeof(op));
nTimeOver:=1000;
setsockopt(FSocket,SOL_SOCKET,SO_SNDTIMEO,@nTimeOver,sizeof(nTimeOver));


    ipHeader.ip_verlen:=(4 shl 4)or sizeof(ipheader) div sizeof(longword);
    ipHeader.ip_len:=htons(Size);
    ipHeader.ip_tos:=0; 
    ipHeader.ip_id:=1;  
    ipHeader.ip_offset:=0; 
    ipHeader.ip_ttl:=128; 
    ipHeader.ip_protocol:=IPPROTO_TCP; 
      FromIp:='';
      For j:=0 to 3 do
        begin
          RandIp:=random(255);
          Str(Randip,Buffer[j]);
        end;
    lstrcat(Fromip,Buffer[0]);    lstrcat(Fromip,'.');
    lstrcat(Fromip,Buffer[1]);    lstrcat(Fromip,'.');
    lstrcat(Fromip,Buffer[2]);    lstrcat(Fromip,'.'); 
    lstrcat(Fromip,Buffer[3]); 
    ipHeader.ip_saddr:=inet_addr(FromIp);
    ipHeader.ip_daddr:=inet_addr(DestIp) ;

    TCPHeader.th_sport:=htons(Random(65000)); 
    TCPHeader.th_dport:=htons(port); 
    TCPHeader.th_seq:=Random(4294967295); 
    TCPHeader.th_ack:=0;
    TCPHeader.th_len:=80;
    TCPHeader.th_flags:=2;
    TCPHeader.th_win:=htons(65535);
    TCPHeader.th_upr:=0; 
    TCPHeader.th_checksum:=0;
    DataPointer := @TCPIP[0];
    FillChar(TCPIP, SizeOf(TCPIP), 0); 
    Move(ipHeader.ip_saddr, DataPointer^, SizeOf(ipHeader.ip_saddr));
    DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_saddr)); 
    ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_saddr);
    Move(ipHeader.ip_daddr, DataPointer^, sizeof(ipHeader.ip_daddr));
    DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_daddr));
    ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_daddr);
    DataPointer := pointer(integer(DataPointer) + 1);
    Inc(ChecksumSize);
    Move(ipHeader.ip_protocol, DataPointer^, sizeof(ipHeader.ip_protocol));
    DataPointer := pointer(integer(DataPointer) + SizeOf(ipHeader.ip_protocol));
    ChecksumSize := ChecksumSize + sizeof(ipHeader.ip_protocol);
    TcpHeaderLen := htons(sizeof(tcpHeader));
    Move(TcpHeaderLen, DataPointer^, sizeof(TcpHeaderLen));
    DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeaderLen));
    ChecksumSize := ChecksumSize + sizeof(TcpHeaderLen);
    Move(tcpHeader, DataPointer^, sizeof(tcpHeader));
    DataPointer := pointer(integer(DataPointer) + SizeOf(TCPHeader));
    ChecksumSize := ChecksumSize + sizeof(tcpHeader);
    tcpHeader.th_checksum := CheckSum(TCPIP, ChecksumSize);
    FillChar(TCPIP, sizeof(TCPIP), 0);
    DataPointer := @TCPIP[0];
    Move(ipHeader, DataPointer^, sizeof(ipHeader));
    DataPointer := pointer(integer(DataPointer) + SizeOf(IPHeader));
    Move(tcpHeader, DataPointer^, sizeof(tcpHeader));

     if (sendto(FSocket,TCPIP,Size,0,SockAddr_in,Sizeof(So  ckAddr_In))=SOCKET_ERROR)
        then
        memo1.lines.Add('error');
        else
        memo1.lines.Add('ok');
    end;

Автор: ScoL 19.3.2008, 16:31
что никто не поможет, мож дадите тогда простенький исходник с комментариями или статьи которые можно почитать

Автор: ScoL 23.3.2008, 20:47
ап

Автор: SneG0K 23.3.2008, 20:58
ScoL ты знаеш, что формирование такового пакета на уровне транспорта может быть использовано только для того, чтобы осуществить Spoofing-IP... И об этом не может быть речи на этом форуме!

Автор: ScoL 23.3.2008, 23:11
Да я знаю это, но мне нужно просто для себя...так сказать кругозора, а вообще просто пытаюсь написать бота для одной игры...

Автор: vovksextra 24.3.2008, 10:32
Цитата(SneG0K @ 23.3.2008,  20:58)
ScoL ты знаеш, что формирование такового пакета на уровне транспорта может быть использовано только для того, чтобы осуществить Spoofing-IP... И об этом не может быть речи на этом форуме!

Странные мышления! А другой вариант никак не рассматривается??? А их достаточно много.

А кнопки на форму ставить и так все умеют.

Парень же не задал вопрос как сломать некую защиту некого софта.



Автор: SneG0K 25.3.2008, 18:26
Хм... Интересно, а для чего еще могут использоваться сырые сокеты?

Автор: vovksextra 26.3.2008, 10:44
Цитата(ScoL @ 19.3.2008,  16:31)
что никто не поможет, мож дадите тогда простенький исходник с комментариями или статьи которые можно почитать

К сожалению я не помню первоисточника, где я это нашел. По-этому перезалил в другое место.

Здесь ты найдешь все ответы на свои вопросы и плюс очень много всего интересного

(пусть меня простят авторы)) )

аштитипи://www.komservice.net/uploads/files/APEX.7z

Добавлено через 54 секунды
Цитата(SneG0K @ 25.3.2008,  18:26)
Хм... Интересно, а для чего еще могут использоваться сырые сокеты?

Они могут послужить и как защита от флуда ))

Автор: SneG0K 26.3.2008, 22:58
От флуда?! Может наоборот? Для флуда? И для массовых расслылок? Или еще там для какой-то фигни? 

Нее... Может я старомодный, но я никак не представляю себе то, как использование сырых сокетов может защитить от флуда!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)