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

Вниз

Vypress Chat   Найти похожие ветки 

 
Андре   (2002-01-31 14:26) [0]

Есть такая программа. Работает по протоколу UDP. Широковещание - broadcast. UDP порт - 8167.

Хочу написать программу которая будет принимать и посылать сообщения пользователям, которые работают с этой программой.

Использую компонент TNMUDP1. Свойства LocalPort:=8167; RemotePort:=8167; RemoteHost:= <устанавливаю адреса машин в сети>. Запускаю программу, но моя программа ничего не принимает, и не удается передать никаких данных VypressChat.

Никто не пробовал решить такую же задачу ?


 
VuDZ   (2002-01-31 15:30) [1]

а ты ео сниффером вначале, а потом уже пиши что-то своё :)


 
Андре   (2002-01-31 15:37) [2]

Может еще ссылочкой поможете. Желательно на бесплатный.


 
Kornet   (2002-01-31 17:02) [3]

Да, пробывал. :) Года 3 назад обитал в общаге, где была местная локалка, тогда в моде была программа qChat. Это предшественник программы Vypress Chat, я сделал аналог програмы с возвожностью перехвата сообщений и отправки от "чужого" имени. Исходники не сохранились, да и не нужны они, не красиво читать чужие сообщения. :) Одно не нравилось мне, широковещание, и незащищённость сообщений. Дам малеьнькие советы:
1. LocalPort:=8167; RemotePort:=8167; RemoteHost:=192.168.0.255, т.е. широковещательный адрес для сети класса С (192.168.0.0).
2. сам чат на этой машине не должен быть запущен, сокет занят и всё такое...


 
Андре   (2002-02-04 15:46) [4]

Насчет того, что читатать чужие сообщения некрасиво - полностью согласен, но что поделаешь, если начальник требует. (Я лучше предупрежу об этом кого нужно :-) ).
Теперь по существу. При приведенных выше настройках я перехватываю все сообщения, но во первых они все одинаковой длинны, а во вторых это не мои сообщения - это какая-то тарабарщина. Данные я принимаю так:

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
begin
MyStream := TMemoryStream.Create;
try
NMUDP1.ReadStream(MyStream);
SetLength(TmpStr,NumberBytes);
MyStream.Read(TmpStr[1],NumberBytes);
Memo1.Lines.Add(FromIP+": "+TmpStr);
finally
MyStream.Free;
end;
end;

В чем дело ? Это при передаче сообщение так разбивается на пакеты или это чат кодирует передаваемые данные ?


 
Ghostbuster   (2002-02-05 09:51) [5]

Нет, данные не кодируются. Просто ты их не можешь отобразить в memo, т.к. в буфере содержатся нулевые байты. Попробуй заменить их на пробелы.


 
Kornet   (2002-02-05 10:37) [6]

Там формат сообщения типа:
тип, состоит из одного байта
от кого,
кому,
параметры,
параметры,
......
признаком разделителя служит символ #0, поэтому как и сказал Ghostbuster в мемо остаток строки просто не отображается...


 
tell   (2002-02-09 13:51) [7]

for Андре: Если не жалко пожелись исходниками твоей проги, у нас тоже локалка на этом чате, тема меня заинтересовала попробую тоже чтонибудь придумать


 
nick_vstu   (2002-02-10 00:48) [8]

и мне, пожалуйста, если можно :)


 
lun-dead@yandex.ru   (2002-02-10 23:01) [9]

У меня исходники есть и того и другого, если что пиши на мыло!
месяц назад мною была примоцка написана, она всё это и делает..


 
cypher   (2002-02-11 12:04) [10]

192.168.0.255 - не совсем верно
лучше 255.255.255.255 ток нетмастеровские ЮДП не понимает такой бродкаст, либо используй другую компоненту, либо ставь пральный бродкаст своей сети..
Вайпресс я расковырял со всеми патрахами...

отправить соо от чужого ника так просто как хочется в нем не получится, так как он определяет ник по твоему ИП адресу... то есть, нада подделывать IP пакет... кроме того, если ника (IP-адреса) чат не знает, то и соо твое он не покажет (нельзя послать сообщение полностью анонимно)...

Я написал прогу для издевательства над вайпрессом, где мона и от любого ника слать соо, и трафик она сниферрит, читая все приваты... правда она у меня под линукс, ну и на гну С написана


 
lun   (2002-02-12 01:23) [11]

По крайне мере в версии 1.0.3 такого замечено небыло
что
>так как он определяет ник по твоему ИП адресу...
Может в последующих версиях это реализовано, что очень с трудом вериться...


 
cypher   (2002-02-16 16:06) [12]

> Может в последующих версиях это реализовано, что очень с трудом вериться...

проверно практикой, со своего IP не послать соо под чужим ником


 
Igor Nikolaev   (2002-02-17 11:52) [13]

Я вижу вы тут очень страдаете. Лучше скачаите снифер для Vypress на яздре Winpcap. Качать на www.sources.ru раздел Паскаль\сеть


 
cypher   (2002-02-17 17:14) [14]

нах, я сниф под Вайпресс уже больше года назад написал, до сих пор им пользуюсь =)


 
Андре   (2002-02-18 12:45) [15]

Может все таки кто нибудь поможет ?
На одной машине запускаю чат, на второй свою программу:

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
MyStream: TMemoryStream;
TmpStr: String;
Bee: array [1..1000] of Char;
rtt,Ic,Inick,Inickis,ism: Integer;
Nick,nickis,sot,mess:string;
i : integer;
dc : Char;
s : string;
begin
NMUDP1.ReadBuffer(Bee, Ic);
s:="";
for i:=1 to 1000 do
begin
dc:=Bee[i];
if dc<>#0 then s:=s+dc;
Label4.Caption:=s;
end;
Memo2.Lines.Add(s);
Memo2.Lines.SaveToFile("d:\qwer");
end;

Посылал "1234567890" с машины на ту же машину (просто для
удобства, хотя пробовал и с одной на другую). Ну нет в полученом
файле такой строки, по крайне мере я не вижу.

Может кто нибудь знает в чем дело ?


 
cypher   (2002-02-18 18:02) [16]

Проверь, точно ли ты получаешьв Bee данные... а дальше че-нить придумаем


 
cypher   (2002-02-18 18:07) [17]

Вот кусок из моего снифера, обрабатывающий скапчерный пакет... на С

void my_callback(u_char *user, const struct pcap_pkthdr *h, const u_char *p){
// *p - pointer to captured buffer
struct udphdr *uh;
struct ip *ih;
struct ether_header *eh;
u_short sport, dport, ulen;
static char buf1[4000];
static char ipFrom[20];
static char ipTo[20];
u_char *n1,*n2,*msg;

// ETHER HEADER
eh=(struct ether_header*)p;
p += sizeof(struct ether_header);
// IP HEADER
ih=(struct ip*)p;
p+=sizeof(struct ip);
// UDP HEADER
uh=(struct udphdr*)p;
p+=sizeof(struct udphdr);
// UDP PARAM
sport = ntohs(uh->uh_sport); // Source port
dport = ntohs(uh->uh_dport); // Destantion port
ulen = ntohs(uh->uh_ulen);

if(p[10]=="6" || p[10]=="J"){ // PRIVATE or MESSAGE ID"s
ip2str(ih->ip_src.s_addr,ipFrom);
ip2str(ih->ip_dst.s_addr,ipTo);

// CHECK FIRST TEN BYTES WITH PREV PACKET
if (!CompareWithPrev(p)) {
n1=p+11; // NICKNAME src
n2=n1+strlen(n1)+1; // NICKNAME dst
msg=n2+strlen(n2)+1; // TEXT
fprintf(stderr,"======================================================$
sprintf(buf1,"[%s] <%s:%s>---|%s:%s|",time_get(),n1,n2,ipFrom,ipTo);

while (strlen(buf1)<80)strcat(buf1,"=");
fprintf(stderr,"%s\n",buf1);
fprintf(stderr,"------------------------------------------------------$
fprintf(stderr,"%s\n\n",msg);
}
}
}


 
cypher   (2002-02-18 18:15) [18]

if (!CompareWithPrev(p)) - проверяет первые 10 байт буфера... они заполняются случайным образом отправителем, и если они такие же как у предыдущего пакета, то чат считает это спамом и сообщение игнорирует. вообще формат соо примерно такой:

vyp_packet = record
chk_packet : array[1..10] of char;
fin1 : byte; всегда #0
packet_type : char; // тип пакета (соо, общий чат, привет, смена ника и пр)
nickname_from:array [1.. _ ] of char; // ник (от кого)
fin2 : char; // всегда #0
nickname_to:array[1.. _ ] of char; // ник кому...
fin3 : char; // всегда #0
msg : array [1.. _ ] of char;
end;

так как длина ников и сообщения строго не фиксирована, то и размер массива точно не известен =)



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

Форум: "Сети";
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.03 c
3-2452
XCB
2002-04-10 09:35
2002.05.02
Ora-03114


3-2495
Igor Kukhtin
2002-04-10 13:18
2002.05.02
Decision Cube


1-2509
Olivka
2002-04-20 19:09
2002.05.02
Получение строки из Ворда


1-2619
Cansas & Rush
2002-04-19 23:30
2002.05.02
Как в Image получить иконку связанную с любым файлом?


1-2613
Satirus
2002-04-20 15:51
2002.05.02
TreeView : LoadFromFIle( file.xml );





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