Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перевод Простого сокета в режим перехвата всего трафика [D5, D7, WinXP]


Страницы:   1 2

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 что ли...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо