Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2012, 19:35   #1
Marselos
 
Регистрация: 22.02.2012
Сообщений: 3
По умолчанию Raw socket

Подскажите в чём проблема пытаюсь отправить Raw пакет на сервер который запущен на своём компе,но почему то ничего не выходит (смотрю через сниффер показывает что пакет отправляется но почемуто нет ни ip получателя ни ip отправителя сниффер вместо этого показывает нули )


Цитата:
unit Unit1;

interface

uses
Windows, Messages, SysUtils,Variants, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, Registry,WinSock2,svcguid;

Const
SrcIP = '127.0.0.1';
SrcPort = 3649;
DestIP = '127.0.0.1';
DestPort = 33;

Max_Message = 4068;
Max_Packet = 4096;



type
TPacketBuffer = Array[0..Max_Packet-1] of byte;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure SendIt;
{ Public declarations }
end;
procedure TForm1.SendIt;
Var
sh : TSocket;
bOpt : Integer;
ret : Integer;
Buf : TPacketBuffer;
Remote : TSockAddr;
Local : TSockAddr;
iTotalSize : Word;
wsdata : TWSAdata;

begin
// Startup Winsock 2
ret := WSAStartup($0002, wsdata);
if ret<>0 then begin
memo1.lines.add('WSA Startup failed.');
exit;
end;
with memo1.lines do begin
add('WSA Startup:');
add('Desc.: '+wsData.szDescription);
add('Status: '+wsData.szSystemStatus);
end;

try
// Создаём сокет
sh := Socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
if (sh = INVALID_SOCKET) then begin
memo1.lines.add('Socket() failed: '+IntToStr(WSAGetLastError));
exit;
end;
Memo1.lines.add('Socket Handle = '+IntToStr(sh));

// Option: Header Include
bOpt := 1;
ret := SetSockOpt(sh, IPPROTO_IP, IP_HDRINCL, @bOpt, SizeOf(bOpt));
if ret = SOCKET_ERROR then begin
Memo1.lines.add('setsockopt(IP_HDRI NCL) failed: '+IntToStr(WSAGetLastError));
exit;
end;

// строим пакет
BuildHeaders( SrcIP, SrcPort,
DestIP, DestPort,
'A4A4A4A4A4',
Buf, Remote, iTotalSize );

// Отправляем пакет
ret := SendTo(sh, buf, iTotalSize, 0, Remote, SizeOf(Remote));
if ret = SOCKET_ERROR then
Memo1.Lines.Add('sendto() failed: '+IntToStr(WSAGetLastError))
else
Memo1.Lines.Add('send '+IntToStr(ret)+' bytes.');

// Закрываем сокет
CloseSocket(sh);
finally
// Закрываем Winsock 2
WSACleanup;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendIt;
end;

end.

Marselos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не создается RAW-socket. Silver_Swift C/C++ Сетевое программирование 9 23.03.2011 22:02
Raw Socket C++ GanBit Помощь студентам 0 21.09.2010 10:01
Тонкости программирования RAW SOCKET под Linux seryoga89 Общие вопросы C/C++ 0 13.06.2010 16:44
Raw сокеты liljon Win Api 1 21.05.2010 23:45
raw пакет spoool Работа с сетью в Delphi 1 02.12.2008 08:43