Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.13;
Скачать: CL | DM;

Вниз

Знатокам WinSock   Найти похожие ветки 

 
JR   (2004-11-27 11:55) [0]

Привет всем!
Сразу код:
var
 adr:sockaddr_in;
 i:integer;
 HSock1:integer;
 Buf:array[0..100] of byte;
begin
 WSAStartup($101,dat);
 HSock1:= Socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 adr.sin_family := AF_INET;
 adr.sin_port := htons(<port>);
 adr.sin_addr.s_addr := inet_addr(<localaddress>);
 i:=1;
 setsockopt(HSock1, SOL_SOCKET, SO_REUSEADDR, @i, 1);
 Bind(HSock1,adr,sizeof(adr));
 repeat
   i:=sizeof(Buf);
   i:=recvfrom(HSock1,Buf,sizeof(Buf),0,adr,i);
   Windows.Beep(1000,100);
 until i<=0;
 CloseSocket(HSock1);
end;

Нужно "сесть" на порт чата, и хватать все входящие пакеты. Дак вот, если приходит пакет широковещательный (адрес назначения например 255.255.255.255), то пакеты принимаются обеими программами, а если только на данный хост (<localaddress>),то только одной из программ, что не есть гуд.
Уважаемые мастера, так и должно быть или можно поправить??? Естесственно это будет не шпион, а полезная программа.


 
JR   (2004-11-27 11:59) [1]

Две программы - сторонний чат и эта программа.
Проверка на ошибки опущена для краткости

......................................


 
JR   (2004-11-27 22:47) [2]

А что молчите?


 
Verg ©   (2004-11-27 22:54) [3]


> то пакеты принимаются обеими программами, а если только
> на данный хост (<localaddress>),то только одной из программ,
> что не есть гуд.


А не понятно поричем тут "обеи программы", при чем удивление по поводу приема адресованных датаграмм?
Они же направлены конкретному адресату. И что бы эжто была за такая сеть, и зачем бы были вообще придуманы адреса, если бы их принимали бы все?

Тебе нужен снифер что ли?
Ты хочешь получить код снифера?


 
JR   (2004-11-27 23:35) [4]

Запущен сторонний чат на UDP-Broadcast. Нужно хватать на этом же компе все входящие на его (чата) порт пакеты (ну сниффер значит своего рода). Дак вот, броадкаст пакеты "ловят" и чат и этот "сниффер", а upd-пакеты, посланные только на данный компьютер, ловят или сам чат или данный пример кода.
Прошу прощения, если опять непонятно... учусь.


 
Verg ©   (2004-11-28 13:42) [5]

При связывании (bind & SO_REUSEADDR) сокета на один и тот же адрес и порт, направленную (адресную) датаграмму получит только один из этих сокетов.
"Поправить" это нельзя.
Придется написать простейший снифер на базе символьного сокета (SOCK_RAW), принимать все входящие IP датаграммы, и далее по заголовкам UDP пакетов брать только нужные пакеты.


 
JR   (2004-11-29 08:05) [6]

Спасибо! Разобрался, работает.
Не подскажите ли ещё, как описывается структура IPHeader(ver4)?


 
Verg ©   (2004-11-29 23:13) [7]

uses WinSock;

type
   // IP header
   PIPHeader = ^TIPHeader;
   TIPHeader = packed record
     verlen : byte;      // версия и длина заголовка
     tos    : byte;      // тип сервиса
     length : word;      // длина всего пакета
     id     : word;      // Id
     offset : word;      // флаги и смещения
     ttl    : byte;      // время жизни
     protocol : byte;    // протокол
     xsum   : word;      // контрольная сумма
     src    : TInAddr;   // IP-адрес отправителя
     dst    : TInAddr;   // IP-адрес назначения
   end;

http://www.freenet6.ru/Info/usmanov-01/index.htm

http://www.zeiss.net.ru/docs/technol/tcpip/tcp00.htm



Страницы: 1 вся ветка

Текущий архив: 2005.02.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
6-1101743510
seeker
2004-11-29 18:51
2005.02.13
направить TSOCKET через прокси....


14-1106293312
X9
2005-01-21 10:41
2005.02.13
Подскажите электронный книжный магазин


3-1105622498
Russko
2005-01-13 16:21
2005.02.13
IBDataSet1.Insert


1-1106874074
KOLIG
2005-01-28 04:01
2005.02.13
Сворачивание окна


10-1083094910
Netrix
2004-04-27 23:41
2005.02.13
Передача строки по COM идёт слишком медленно!