![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать включен ли в сеть определенный компьютер? [D7]
Сергей И © (2007-07-06 14:51:00)Подскожите ка копределить ключен ли в данный момент определенный компьютер локальной сети?
Slym (2007-08-17 10:08:00) [1]Забыл добавить: и на большинство файрволов нас..ть :)
Slym (2007-08-17 10:07:00) [2]test.bat
@echo off
ping -n 1 %1 >nul
arp /a | find.exe /i /c "%1 "
пример:
C:\test.bat 192.168.1.1
>1 - если имеется
>0 - если отсутствует
SergAS (2007-08-17 09:01:00) [3]Команду net view никто не отменял.
VirEx (2007-07-09 19:23:00) [4]
> [21] DVM © (08.07.07 22:59)
точно. свитч.
да. в таблице только айпишники, а имена в локалке получить удается видимо только через netbios (?)
зы. когда пропускал самодельный пингер через сниффер, кроме пинга были еще какие-то "странные" пакеты, оказалось от функции GetHostByName
DVM (2007-07-08 22:59:00) [5]
> хаб еще "помнит"
Хаб ни о чем помнить не может. Arp - таблицу имеет свитч, да и то в этой таблице нет ни слова об именах компьютеров.
umbra (2007-07-08 19:07:00) [6]
> можно узнать по GetHostByName существовал ли вобще такой
> хост в сетке
если есть DNS, Wins или правильно заполнен файл hosts
VirEx (2007-07-07 11:05:00) [7]можно узнать по GetHostByName существовал ли вобще такой хост в сетке (например в локалке, комп вырубили час назад - хаб еще "помнит" о нем, сбросили хаб и функция не работает)
можно пингом, но ненадежно
можно raw tcp отсылать на диапазон портов но тоже не надежно
Temp_Yuriy (2007-07-07 06:35:00) [8]А это фрагмент файла конфигурации.
[KolvoAdrLink]=2
[Adress]
1StateLink=1
1APILink=1.1.1.1
1NameLink=gjggjjgj
1NazvanLink=xxx1
1APINazvanLink=zzz1
1TopLink= 30
1LeftLink=30
1AdrLink=a1
1LabelLeftLink=-30
1LabelLeft2Link=-30
2StateLink=1
2APILink=2.2.2.2
2NameLink=34534
2NazvanLink=xxx2
2APINazvanLink=zzz2
2TopLink= 130
2LeftLink=70
2AdrLink=a2
2LabelLeftLink=-50
2LabelLeft2Link=-50
Temp_Yuriy (2007-07-07 06:33:00) [9]procedure TForm1.TestCCO_IzLinki(Sender : TObject);
var
qwerty : TStringList;
tempik : string;
begin
// SetLength (OldArray, StrToInt(KolvoAdr)+1);
// SetLength (CountArray, StrToInt(KolvoAdr)+1);
for i_IzLinki :=1 to StrToInt(KolvoAdr_IzLinki) do
begin
qwerty:=TStringList.Create;
qwerty.LoadFromFile(CurrentDir+'\chas.ini');
tempik :=qwerty.Values[IntToStr(i_IzLinki)+'StateLink'];
if (tempik <> '') and (tempik = '1') then begin
IP_IzLinki :=List_IzLinki.Values[IntToStr(i_IzLinki)+'APILink'];
if (OldArray_IzLinki[i_IzLinki]) < 2 then begin
Inc(OldArray_IzLinki[i_IzLinki]);
qwerty.Free;
end
else begin
CountArray_IzLinki[i_IzLinki] := True;
// Label1.Caption :='Связи - нет';
MediaPlayer.AutoOpen :=true;
MediaPlayer.FileName :='E:\student\WinChas\AUDIO\Adreserr.wav';
MediaPlayer.Open;
MediaPlayer.Play;
for U_IzLinki :=0 to ComponentCount - 1 do
if Components[U_IzLinki] is TImage then
if TImage(Components[U_IzLinki]).Name = 'a'+IntToStr(i_IzLinki) then
TImage(Components[U_IzLinki]).Picture.LoadFromFile(CurrentDir+'\red.bmp');
qwerty.Free;
end;
end;
Object_Linki;
end;
end;
procedure TForm1.test_IzLinki (Sender : TObject);
begin
CountArray_IzLinki[i_IzLinki] := False;
OldArray_IzLinki[i_IzLinki] := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CurrentDir := GetCurrentDir();
List_IzLinki:=TStringList.Create;
List_IzLinki.LoadFromFile(CurrentDir+'\chas.ini');
KolvoAdr_IzLinki := List_IzLinki.Values['[KolvoAdrLink]'];
for i_IzLinki :=1 to StrToInt(KolvoAdr_IzLinki) do
begin
State_IzLinki :=List_IzLinki.Values[IntToStr(i_IzLinki)+'StateLink'];
IP_IzLinki :=List_IzLinki.Values[IntToStr(i_IzLinki)+'APILink'];
Tops_IzLinki :=List_IzLinki.Values[IntToStr(i_IzLinki)+'TopLink'];
Lefts_IzLinki :=List_IzLinki.Values[IntToStr(i_IzLinki)+'LeftLink'];
Names_IzLinki :=List_IzLinki.Values[IntToStr(i_IzLinki)+'AdrLink'];
Nazv_IzLinki := List_IzLinki.Values[IntToStr(i_IzLinki)+'NameLink'];
Nazvan_IzLinki := List_IzLinki.Values[IntToStr(i_IzLinki)+'NazvanLink'];
APINazvan_IzLinki := List_IzLinki.Values[IntToStr(i_IzLinki)+'APINazvanLink'];
LabelLeft2_IzLinki := List_IzLinki.Values[IntToStr(i_IzLinki)+'LabelLeft2Link'];
LabelLeft_IzLinki := List_IzLinki.Values[IntToStr(i_IzLinki)+'LabelLeftLink'];
Image1_IzLinki :=TImage.Create(Self);
Image1_IzLinki.Width :=80;
Image1_IzLinki.Height :=80;
if Tops_IzLinki <> '' then Image1_IzLinki.Top :=StrToInt (Tops_IzLinki)-10;
if Lefts_IzLinki <> '' then Image1_IzLinki.Left :=StrToInt (Lefts_IzLinki)-20;
Image1_IzLinki.Picture.LoadFromFile(CurrentDir+'\COMPBLAC.bmp');
Image1_IzLinki.Parent :=Self;
with TImage.Create(Self) do
begin
if Tops_IzLinki <> '' then Top :=StrToInt (Tops_IzLinki);
if Lefts_IzLinki <> '' then Left :=StrToInt (Lefts_IzLinki);
if Names_IzLinki <> '' then Name :=Names_IzLinki;
Width :=22;
Height :=18;
if (State_IzLinki <> '') and (State_IzLinki = '0') then
Picture.LoadFromFile(CurrentDir+'\blue.bmp')
else
Picture.LoadFromFile(CurrentDir+'\green.bmp');
OnClick :=ClickOnImage_IzLinki;
Parent :=Self;
end;
// Для названия параметра
with TLabel.Create(Self) do
begin
if Tops_IzLinki <> '' then Top := StrToInt (Tops_IzLinki)+50;
if Lefts_IzLinki <> '' then Left := StrToInt (Lefts_IzLinki)+ StrToInt(LabelLeft_IzLinki);
if Names_IzLinki <> '' then Caption := Nazv_IzLinki;
Name :=Nazvan_IzLinki;
Font.Color :=clWindow;
OnClick :=LinkiParametrName;
Parent :=Self;
end;
// Для IP адреса
with TLabel.Create(Self) do
begin
if Tops_IzLinki <> '' then Top := StrToInt (Tops_IzLinki)+65;
if Lefts_IzLinki <> '' then Left := StrToInt (Lefts_IzLinki)+ StrToInt(LabelLeft2_IzLinki);
if Names_IzLinki <> '' then Caption := IP_IzLinki;
Name :=APINazvan_IzLinki;
Font.Color :=clWindow;
OnClick :=LinkiIPAdres;
Parent :=Self;
end;
end;
Timer_IzLinki :=TTimer.Create(Self);
Timer_IzLinki.Enabled :=true;
Timer_IzLinki.Interval :=8000;
Timer_IzLinki.Name :='Timer1Link';
Timer_IzLinki.Tag :=0;
Timer_IzLinki.OnTimer :=TestCCO_IzLinki;
MediaPlayer :=TMediaPlayer.Create(Self);
MediaPlayer.Parent :=Self;
MediaPlayer.Visible :=false;
SetLength (OldArray_IzLinki, StrToInt(KolvoAdr_IzLinki)+1);
SetLength (CountArray_IzLinki, StrToInt(KolvoAdr_IzLinki)+1);
end;
end.
Temp_Yuriy (2007-07-07 06:32:00) [10]procedure TForm1.ClickOnImage_IzLinki(Sender: TObject);
var
U, ij, str : integer;
LocalList : TStringList;
TempState, NamesAdr, TempStr : string;
begin
for U :=0 to ComponentCount - 1 do
if Components[U] is TImage then
if TImage(Components[U]).Name = TComponent(Sender).Name then begin
// ShowMessage ('Click!!!');
CurrentDir := GetCurrentDir(); //Возвращает текущий каталог
LocalList:=TStringList.Create;
LocalList.LoadFromFile(CurrentDir+'\chas.ini');
KolvoAdr_IzLinki :=LocalList.Values['[KolvoAdrLink]'];
for ij :=1 to StrToInt(KolvoAdr_IzLinki) do
begin
NamesAdr := LocalList.Values[IntToStr(ij)+'AdrLink'];
if NamesAdr = TComponent(Sender).Name then begin
// ShowMessage (TComponent(Sender).Name);
TempState := IntToStr(ij)+'AdrLink' + '=' + TComponent(Sender).Name;
// ShowMessage (TempState);
str := LocalList.IndexOf(TempState);
str := str - 7;
TempStr :=LocalList.Names[str];
////////////////////////////////////////////////////////////////
if LocalList.Values[TempStr] = '0' then begin
LocalList.Values[TempStr] := '1';
TImage(Components[U]).Picture.LoadFromFile(CurrentDir+'\green.bmp');
// MediaPlayer.Parent :=Self;
// MediaPlayer.Visible :=false;
MediaPlayer.AutoOpen :=true;
MediaPlayer.FileName :=CurrentDir+'\ADRESON.WAV';
MediaPlayer.Open;
MediaPlayer.Play;
LocalList.SaveToFile(CurrentDir+'\chas.ini');
end
else if LocalList.Values[TempStr] = '1' then begin
LocalList.Values[TempStr] := '0';
TImage(Components[U]).Picture.LoadFromFile(CurrentDir+'\blue.bmp');
// MediaPlayer.Parent :=Self;
// MediaPlayer.Visible :=false;
MediaPlayer.AutoOpen :=true;
MediaPlayer.FileName :=CurrentDir+'\ADRESOFF.WAV';
MediaPlayer.Open;
MediaPlayer.Play;
LocalList.SaveToFile(CurrentDir+'\chas.ini');
end;
end;
end;
// NamesAdr := LocalList.Values[IntToStr(ij)+'Name'];
end;
end;
procedure Object_Linki;
begin
try
try
NMEchoAdr_IzLinki := TNMEcho.Create(Form1);
NMEchoAdr_IzLinki.TimeOut := 150;
NMEchoAdr_IzLinki.Port := 139;
NMEchoAdr_IzLinki.Host := IP_IzLinki;
NMEchoAdr_IzLinki.OnConnect :=Form1.test_IzLinki;
NMEchoAdr_IzLinki.Connect;
except
Exit;
end;
finally
NMEchoAdr_IzLinki.Free;
end;
end;
Temp_Yuriy (2007-07-07 06:32:00) [11]procedure TForm1.LinkiParametrName(Sender: TObject);
var
LocalLinkiList : TStringList;
LocalLinkiStroka, LinkiTemp, NewLinkiTemp : string;
LocalLinkiTemp, LocLinkiInt : integer;
sslinki : string;
begin
///////////////////// Для названия параметра //////////////////////
LocalLinkiStroka :=InputBox('Название', 'Введите название', '');
LocalLinkiList :=TStringList.Create;
LocalLinkiList.LoadFromFile(CurrentDir+'\chas.ini');
if LocalLinkiStroka <> '' then begin
for LocalLinkiTemp :=1 to StrToInt(KolvoAdr_IzLinki) do
begin
LinkiTemp := LocalLinkiList.Values[IntToStr(LocalLinkiTemp)+'NazvanLink'];
if LinkiTemp = TLabel(Sender).Name then begin
NewLinkiTemp := IntToStr(LocalLinkiTemp)+'NazvanLink'+'='+ LinkiTemp;
LocLinkiInt :=LocalLinkiList.IndexOf(NewLinkiTemp);
LocLinkiInt :=LocLinkiInt-1;
// ShowMessage (IntToStr(LocLinkiInt));
// LocalLinkiList.Values[LocLinkiInt] := LocalLinkiStroka ;
sslinki :=LocalLinkiList.Names[LocLinkiInt];
LocalLinkiList.Values[sslinki] :=LocalLinkiStroka;
TLabel(Sender).Caption :=LocalLinkiStroka;
LocalLinkiList.SaveToFile(CurrentDir+'\chas.ini');
// ShowMessage (sslinki);
end;
end;
LocalLinkiList.Free;
end;
end;
procedure TForm1.LinkiIPAdres(Sender: TObject);
// Для IP адреса
var
LocalLinkiList : TStringList;
LocalLinkiStroka, LinkiTemp, NewLinkiTemp : string;
LocalLinkiTemp, LocLinkiInt : integer;
sslinki : string;
begin
///////////////////// Для названия параметра //////////////////////
LocalLinkiStroka :=InputBox('A P I', 'Введите API Адрес', '');
LocalLinkiList :=TStringList.Create;
LocalLinkiList.LoadFromFile(CurrentDir+'\chas.ini');
if LocalLinkiStroka <> '' then begin
for LocalLinkiTemp :=1 to StrToInt(KolvoAdr_IzLinki) do
begin
LinkiTemp := LocalLinkiList.Values[IntToStr(LocalLinkiTemp)+'APINazvanLink'];
if LinkiTemp = TLabel(Sender).Name then begin
//// ShowMessage ('YES!!!!!');
LinkiTemp := LocalLinkiList.Values[IntToStr(LocalLinkiTemp)+'APILink'];
//// ShowMessage (LinkiTemp);
NewLinkiTemp := IntToStr(LocalLinkiTemp)+'APILink'+'='+ LinkiTemp;
////ShowMessage (NewLinkiTemp);
LocLinkiInt :=LocalLinkiList.IndexOf(NewLinkiTemp);
//// LocLinkiInt :=LocLinkiInt-2;
// ShowMessage (IntToStr(LocLinkiInt));
// LocalLinkiList.Values[LocLinkiInt] := LocalLinkiStroka ;
//ShowMessage (LocalLinkiList.Values[LocLinkiInt]);
sslinki :=LocalLinkiList.Names[LocLinkiInt];
LocalLinkiList.Values[sslinki] :=LocalLinkiStroka;
TLabel(Sender).Caption :=LocalLinkiStroka;
LocalLinkiList.SaveToFile(CurrentDir+'\chas.ini');
// ShowMessage (sslinki);
end;
end;
LocalLinkiList.Free;
end;
end;
Temp_Yuriy (2007-07-07 06:31:00) [12]Хотя лови целиком программу, секретов тут нет....
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Psock, NMEcho, ExtCtrls, MPlayer;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure test_IzLinki (Sender : TObject);
procedure TestCCO_IzLinki(Sender : TObject);
procedure ClickOnImage_IzLinki(Sender: TObject);
procedure LinkiParametrName(Sender: TObject);
procedure LinkiIPAdres(Sender: TObject);
{ Public declarations }
end;
TOldArray = array of integer;
TCountArray = array of bool;
var
Form1: TForm1;
NMEchoAdr_IzLinki : TNMEcho;
// ErrorAdr : bool;
i_IzLinki, U_IzLinki : integer;
Timer_IzLinki : TTimer;
MediaPlayer : TMediaPlayer;
CurrentDir, State_IzLinki, IP_IzLinki, KolvoAdr_IzLinki : string;
Tops_IzLinki, Lefts_IzLinki, Names_IzLinki, Nazv_IzLinki : string;
LabelLeft2_IzLinki, LabelLeft_IzLinki, Nazvan_IzLinki : string;
APINazvan_IzLinki : string;
List_IzLinki:TStringList;
OldArray_IzLinki: TOldArray;
CountArray_IzLinki: TCountArray;
Image1_IzLinki : TImage;
implementation
{$R *.dfm}
Продолжение дальше в ответах.......
Temp_Yuriy (2007-07-07 06:26:00) [13]Я сталкивался и решал подобную проблемму. Если нет правил файрвола, то (по умолчанию в виндах всегда открыт порт 139) доступность удалённого компьютера можно определить так:
procedure Object_Linki;
begin
try
try
NMEchoAdr_IzLinki := TNMEcho.Create(Form1);
NMEchoAdr_IzLinki.TimeOut := 150;
NMEchoAdr_IzLinki.Port := 139;
NMEchoAdr_IzLinki.Host := IP_adress;
NMEchoAdr_IzLinki.OnConnect :=Form1.test_IzLinki;
NMEchoAdr_IzLinki.Connect;
except
Exit;
end;
finally
NMEchoAdr_IzLinki.Free;
end;
end;
procedure TForm1.test_IzLinki (Sender : TObject);
begin
CountArray_IzLinki[i_IzLinki] := False;
OldArray_IzLinki[i_IzLinki] := 0;
end;
Тока додумай и переделай код под свою программу, а то мне лень -). И
Anatoly Podgoretsky (2007-07-06 18:34:00) [14]> Dib@zol (06.07.2007 16:32:09) [9]
получить положительный ответ можно, а можно и не получить.
Второе вероятнее.
DVM (2007-07-06 17:19:00) [15]
C:\>telepator
telepator> open 192.168.0.10 139
192.168.0.10>Hello! This computer is enabled!
telepator> quit
192.168.0.10>By
C:\>
Dib@zol (2007-07-06 16:33:00) [16]
> Плохой телепатор :)
> напр
Dib@zol (2007-07-06 16:32:00) [17]
> "обратиться" можно всегда. даже если нету ни шар, ни самого
> компа.
Ёлы. Не цепляйся к словам. Под понятием ОБРАТИТЬСЯ я подразумевал "получить положительный ответ". Да мол, есть такая папка.
iXT (2007-07-06 16:31:00) [18]> Ну эта, как его. Можно ли напр обратиться к его расшаренным
> папкам.
А у меня тачка с http-80, pop3-110, и smtp-25 и ни одной расшаренной папки. Он как доступен?
Плохой телепатор :)
Reindeer Moss Eater (2007-07-06 16:28:00) [19]Можно ли напр обратиться к его расшаренным папкам.
"обратиться" можно всегда. даже если нету ни шар, ни самого компа.
Dib@zol (2007-07-06 16:25:00) [20]
> Что значит доступен
Ну эта, как его. Можно ли напр обратиться к его расшаренным папкам.
ЗЫ
А мож у меня переменные окружения прописаны? =D