Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Знатокам 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
14-1106224865
Anonimus
2005-01-20 15:41
2005.02.13
Выделенка на Вынь2к


1-1107089778
ТехникПТО
2005-01-30 15:56
2005.02.13
Как удалить определенный файл??


11-1084949258
RTWolf
2004-05-19 10:47
2005.02.13
Почему нет символа "_" ?


14-1106300659
Prepod
2005-01-21 12:44
2005.02.13
литература


11-1090955253
Владимир
2004-07-27 23:07
2005.02.13
Автозапуск программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский