Форум: "Сети";
Текущий архив: 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