Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отправка пакета через "сырые сокеты" 
:(
    Опции темы
lollollollol
Дата 18.4.2013, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Здравствуйте.
Пытаюсь отправить пакет, софт говорит что отправка прошла успешно, но в результате, судя по фаерволу, соединения не появляется, а вместо этого в разделе открытых портов фаервол пишет local:any

Вот сам код

Код

 //IP-заголовок
  iph = record
    ip_verlen: byte; //Версия и длина 
    ip_tos: byte; //Приоритет пакета
    ip_len: word; // Длина заголовка
    ip_id: word; // id -пакета
    ip_offset: word; //Смещение
    ip_ttl: byte; //Время жизни
    ip_protocol: byte; //Протокол
    ip_checksum: word; //Контрольная сумма
    ip_saddr: longword; 
    ip_daddr: longword; 
  end;
  //TCP-заголовок
  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;




function CheckSum(var Buffer; Size : integer) : Word;
type
  TWordArray = array[0..1] of Word;
var
  ChkSum : longWord;
  i : Integer;
begin
  ChkSum := 0;
  i := 0;
  while Size > 1 do
  begin
    ChkSum := ChkSum + TWordArray(Buffer)[i];
    inc(i);
    Size := Size - SizeOf(Word);
  end;
  if Size=1 then
    ChkSum := ChkSum + Byte(TWordArray(Buffer)[i]);
  ChkSum := (ChkSum shr 16) + (ChkSum and $FFFF);
  ChkSum := ChkSum + (Chksum shr 16);
  Result := Word(ChkSum);
end;

procedure go;
var
  wsaData : TWSAData;
  FSocket:TSocket;
  op,nTimeOver:integer;
  ipHeader:iph;
  FromIp:string;
  j,RandIp:integer;
  Buffer:array[0..3] of string;
  DestIp:Pchar;
  TCPHeader:tcph;
  i,port:integer;
  ChecksumSize,TcpHeaderLen:integer;
  DataPointer:pointer;
  TCPIP:array[0..4096] of char;
  SockAddr_in:TSockAddr;
begin
  port:=80;
  DestIp:='67.228.172.2';
  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));
  //Собираем пакет
    //Пишем версию и длину ip-пакета
  ipHeader.ip_verlen:=((4 shl 4)or sizeof(ipheader) div sizeof(longword));
  ipHeader.ip_len:=SizeOf(ipHeader);
  ipHeader.ip_tos:=0; //Приоритет пакета
  ipHeader.ip_id:=1;  //id-пакета
  ipHeader.ip_offset:=0; //смещение
  ipHeader.ip_ttl:=128; //время жизни пакета
  ipHeader.ip_protocol:=IPPROTO_TCP; //протокол
  FromIp:='';
  For j:=0 to 3 do begin
    RandIp:=random(254)+1;
    Fromip:=Fromip+IntToStr(RandIp);
    if (j<3) then Fromip:=Fromip+'.'; 
  end;
  ipHeader.ip_saddr:=inet_addr(pchar(FromIp));
  ipHeader.ip_daddr:=inet_addr(DestIp) ;//Адрес получателя
    //Заполняем TCP-заголовок
  TCPHeader.th_sport:=htons(Random(65000));
  TCPHeader.th_dport:=htons(port); //Порт получателя
  TCPHeader.th_seq:=Random(4294967295); //Номер пакета
  TCPHeader.th_ack:=0;
  TCPHeader.th_len:=80;
    //SYN-пакет
  TCPHeader.th_flags:=2;
  TCPHeader.th_win:=htons(65535);
  TCPHeader.th_upr:=0;
  TCPHeader.th_checksum:=0;//Контрольная сумма TCP-пакета, которая расчитывается ниже
    //Расчет контрольной суммы
    ChecksumSize:=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 := 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));

  SockAddr_in.sin_family:=AF_INET;
  SockAddr_in.sin_port:=TCPHeader.th_dport;
  SockAddr_in.sin_addr.S_addr:=ipHeader.ip_daddr;

   // После чего его нужно отправить
     if sendto(FSocket,TCPIP,ChecksumSize,0,SockAddr_in,Sizeof(SockAddr_In))=SOCKET_ERROR
        then
          MessageBox(0,Pchar(syserrormessage(WSAGetLastError)),'',0)
        else
          ShowMessage('Send ok');
end;




Вопрос, что я делаю не правильно? Как отправить пакет? 


заренее благодарен

Это сообщение отредактировал(а) lollollollol - 18.4.2013, 20:59
PM MAIL   Вверх
lollollollol
Дата 18.4.2013, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



http://www.sources.ru/delphi/delphi_send_r...p_packets.shtml
не работает пример...

тту тож самое, может дело в том что винда 7? в чём разница, что сделать чтобы работало?

Добавлено @ 22:38
Пытался полчить привелегии, безполезно 

Код

  if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken ) then exit;
  if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then begin
    CloseHandle(hToken);
    exit;
  end;
  tkp.PrivilegeCount:= 1;
  tkp.Privileges[0].Luid := SeDebugNameValue;
  tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);
  SendIt;
  tkp.Privileges[0].Attributes := 0;
  AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);


Это сообщение отредактировал(а) lollollollol - 19.4.2013, 00:00
PM MAIL   Вверх
lollollollol
Дата 21.4.2013, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Почему под Win 2000 работает, а под Win 7 нет? 
PM MAIL   Вверх
lollollollol
Дата 22.4.2013, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 12.3.2013

Репутация: нет
Всего: нет



Как я понял, само ядро не позволяет отправить пакет в моём случае, верно?
Или это можно сделать из режима пользователя?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.