На Дельфях
Первое, что я хотел узнать, это как узнать имя компа (NetBios) по IP, если комп находится в домене? Работая через WinSock, с помощью gethostbyaddr можно получить имя компа Netbios, но если комп находится не в домене. Примером таковых компьютеров, является рабочаю группа PiNet. Но, а если же получать имена компов нашей рабочей группы (к примеру Net), через ту же технологию, то всегда будут выводится доменные имена... Хотелось бы, как у NetLook и еще, не на основе WNet, очень медленно, нужно быстро
Второе, как узнать рабочую группу (Domain), в которую входит комп, также по IP....опять пример NetLook, нужно быстро....
Третий вопрос связан с узнаванием ПО и версии ПО FTP сервера....работаю через технологию Indy при помощи TCPclienta. Сразу скажу, после коннекта с серваком получаю строчку 220 ..... (итд) от сюда можно выдрать ПО (и его версию) Но прикол в том, что у каждого сервака свое приветствие, как узнать, что относится к ПО и версии ПО из этой строчки фиг знает....?
Чё никто не знает что ли?
попробую поискать у меня был листинг похожей проги.....
попробую поискать у меня был листинг похожей проги.....
Там есть, но это мне не нужно! Но все равно спасибо!
на первые два я так понял тебе ответили...
...Третий вопрос связан с узнаванием ПО и версии ПО FTP сервера....работаю через технологию Indy при помощи TCPclienta. Сразу скажу, после коннекта с серваком получаю строчку 220 ..... (итд) от сюда можно выдрать ПО (и его версию) Но прикол в том, что у каждого сервака свое приветствие, как узнать, что относится к ПО и версии ПО из этой строчки фиг знает....?
Ты говоришь о баннерах. Только я не особо понял что тебе неясно? То, что тебе отвечает сервер - его личное дело, так что естественно что нет особых стандартов (ВООБЩЕ). Баннер может даже отсутствовать (грамотный админ его уберёт или заменит, что ещё веселей). Придумать какой-либо алгоритм вроде "первые 10 символов - название, затем пробел и 5 символов на версию" невозможно. В обычных программах версия и название сервера ПО определяется по "слепку" (т.е. у тебя в проге просто должны быть шаблоны для наиболее популярных серверов). Если лень устанавливать себе множество ФТПшников - посмотри сорцы какой-нибудь софтины, проделывающей подобные вещи... Например для Serv-U FTP баннер такого типа:
Serv-U FTP Server v6.3 for WinSock ready...
ЗЫ: вот например у меня стоял сервер (не мною написанный), который при соединении выдавал:
220 ready
определи тут версию ПО B)
на первые два я так понял тебе ответили...
Ты говоришь о баннерах. Только я не особо понял что тебе неясно? То, что тебе отвечает сервер - его личное дело, так что естественно что нет особых стандартов (ВООБЩЕ). Баннер может даже отсутствовать (грамотный админ его уберёт или заменит, что ещё веселей). Придумать какой-либо алгоритм вроде "первые 10 символов - название, затем пробел и 5 символов на версию" невозможно. В обычных программах версия и название сервера ПО определяется по "слепку" (т.е. у тебя в проге просто должны быть шаблоны для наиболее популярных серверов). Если лень устанавливать себе множество ФТПшников - посмотри сорцы какой-нибудь софтины, проделывающей подобные вещи... Например для Serv-U FTP баннер такого типа:
Serv-U FTP Server v6.3 for WinSock ready...
ЗЫ: вот например у меня стоял сервер (не мною написанный), который при соединении выдавал:
220 ready
определи тут версию ПО B)
По третьему вопросу надо почитать rfc 959....но там ппц....все английском
На первые два, кстати мне никто так и не ответил B) Я сам...нашел то что нужно мне...
По первому и второму вот это на подоби nbtstat -a
type
TNetbiosInfo = record
AdapterStatus: TAdapterStatus;
NameBuffer: array [0..30] of TNameBuffer;
end;
procedure GetNetBiosNames(const Addr: String);
var
Ends: Byte;
I, A: Integer;
NCB: TNCB;
Enum: TLanaEnum;
NetbiosInfo: TNetbiosInfo;
begin
FillChar(NCB, SizeOf(TNCB), #0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := @Enum;
NCB.ncb_length := SizeOf(TLanaEnum);
if Netbios(@NCB) = Char(NRC_GOODRET) then
for I := 0 to Integer(Enum.length) - 1 do
begin
FillChar(NCB, SizeOf(TNCB), #0);
NCB.ncb_lana_num := Enum.lana[I];
NCB.ncb_command := Char(NCBRESET);
if Netbios(@NCB) = Char(NRC_GOODRET) then
begin
FillChar(NetbiosInfo, SizeOf(TNetbiosInfo), #0);
NCB.ncb_command := Char(NCBASTAT);
Move(Addr[1], NCB.ncb_callname[0], Length(Addr));
NCB.ncb_buffer := @NetbiosInfo;
NCB.ncb_length := SizeOf(TNetbiosInfo);
if Netbios(@NCB) = Char(NRC_GOODRET) then
for A := 0 to NetbiosInfo.AdapterStatus.name_count - 1 do
begin
Ends := Byte(NetbiosInfo.NameBuffer[A].name[NCBNAMSZ - 1]);
NetbiosInfo.NameBuffer[A].name[NCBNAMSZ - 1] := #32;
Memo1.Lines.Add(Format('%s <%s>',
[String(NetbiosInfo.NameBuffer[A].name),
IntToHex(Ends, 2)]));
end;
end;
end;
end;
И еще не зыбыть подключить модуль nb30.....
А!!! Помогите.
Есть у кого delphi 6?
Или научите меня работать с компонеетами Socket (Indy) в delphi 7. Я всё делал в шестой делфе, а в седьмой что-то половина функций исчезла .
По возможности напишите пример программы чата между двумя компьютерами (сервер и клиент), а дальше сам разберусь.