![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перевод Простого сокета в режим перехвата всего трафика [D5, D7, WinXP]
Rezya © (2004-03-28 00:11:00)Привет Всем. Вот занялся написанием снифера. После долгих разбираний продвинулся до перевода простого сокета в режим перехвата входящего трафика и на этом остановился.
Глянте код в чем моя ошибка при попытке перевести сокет в режим перехвата всего входящего трафика по средством функции ioctlsocket но при этом он мне выдает ошибку 10022. Вот Код:
procedure TForm1.Button1Click(Sender: TObject);
Const
SIO_RCVALL =$98000001;
var
WSAData : TWSAData;
p : PHostEnt;
Name : array [0..$FF] of Char;
Sock:TSocket;
Addr:sockaddr_in;
ApAddres:String;
IOCTLFlag:integer;
begin
{----Вычисление IP-адреса}
WSAStartup($0101, WSAData);
GetHostName(name, $FF);
p := GetHostByName(Name);
while (p.h_addr_list^ <> nil) do
begin
Memo1.Lines.Add('Адрес машины-'+inet_ntoa(PInAddr(p.h_addr_list^)^));
ApAddres:=inet_ntoa(PInAddr(p.h_addr_list^)^);
Inc(p.h_addr_list);
end;
{------------------------------------}
Sock:=Socket(Af_Inet,SOCK_RAW,IPPROTO_IP);
If Sock=Invalid_Socket then Memo1.Lines.Add('Ошибка создания Сокета-'+Inttostr(WsaGetLastError));
Addr.sin_family :=AF_INET;
Addr.sin_addr.s_addr :=inet_addr(PChar(ApAddres));
if bind(Sock, Addr, SizeOf(Addr)) <> 0 then Memo1.Lines.Add('Ошибка Bind-'+Inttostr(WsaGetLastError));
IOCTLFlag:=1;
if ioctlsocket(Sock, SIO_RCVALL, IOCTLFlag) <> 0 then Memo1.Lines.Add('Ошибка ioctlsocket-'+Inttostr(WsaGetLastError));
WSACleanup;
end;
Cobalt (2004-03-28 11:38:00) [21]А выяснить, что это за ошибка - 10022, не судьба?
Лень-матушка?
Rouse_ (2004-03-28 03:28:00) [22]И что - даже перехватывается все?
Rezya (2004-03-28 03:09:00) [23]Господа вопрос срочно меняется. Как оказалось когда компьютер не в сети(в данном случае не в Интернете) он выдает ошибку 10022, но когда он в сети все нормально работает. Странно но факт. У кого какие соображения?
Rezya (2004-03-28 03:01:00) [24]Вся фишка в функциях ioctlsocket и setsockopt какойто из них надо присвоить значение SIO_RCVALL =$98000001; и тогда сокет так сказать будет получать все данные приходящие на IP модуль.
Но какой из них, и как это сделать, только наверное только богу известно.
Rouse_ (2004-03-28 01:35:00) [25]Кстати под ХР есть вариант воспользоваться их собственным драйвером. В интернете была статья на эту тему - поищи...
Rouse_ (2004-03-28 01:26:00) [26]Ну - ну, и каким же макаром ты решил перевести карту в promiscuous mode без драйвера? Это что по твоему Линукс чтоли?
Rezya (2004-03-28 01:07:00) [27]Про библиотеку WinPcap я читал но мне надо на простых сокетах.
Почему объяснять не буду.
Piter (2004-03-28 00:39:00) [28]Rezya (28.03.04 00:11)
перевода простого сокета в режим перехвата входящего трафика
что за бред? Хочешь писать снифер.. ну почитай про библиотеку WinPcap что ли...