Главная страница
    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.46 MB
Время: 0.041 c
1-1106756062
Blond
2005-01-26 19:14
2005.02.13
Помощь в delphi7


6-1102001692
Colonel
2004-12-02 18:34
2005.02.13
Заголовок IE


6-1101979272
zdx 200
2004-12-02 12:21
2005.02.13
Отсылка файла с IdHttpServer


3-1105986233
KristinA
2005-01-17 21:23
2005.02.13
Kak s4itat bazu dannih do togo kak form1 pojavitsja??


1-1107174711
Aleksandr.
2005-01-31 15:31
2005.02.13
Почему у меня результат упаковки zLib ом не открывается Winzip?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский