PDA

View Full Version : پیدا کردن Ip خارجی



DAMAVAND
چهارشنبه 12 دی 1386, 03:03 صبح
توی یه برنامه لازمه که IP هایی که در حال حاضر با سیستم در حال ارتباط هستن رو پیدا کنم همون طوری که میدونید با دستور netstat -n میشه ینکار رو تو Command prompt انجام داد .
ولی تو دلفی چه جوری میشه این کار رو کرد ??????
جستجو کردم برای netstat چیزی پیدا نکردم .نمیخوام با استفاده از winexe,shellexe این کار رو انجام بدم با خود کامپوننت های دلفی. اگه کسی مثالی داره ممنون میشم.

delphi5
چهارشنبه 12 دی 1386, 08:45 صبح
فکر میکنم باید دنبال INDY باشی

DAMAVAND
چهارشنبه 12 دی 1386, 09:18 صبح
فکر میکنم باید دنبال INDY باشی

میدونم ولی من که نتونستم ! مثالی هم پیدا نکردم !
همچنان منتظر راهنمایی دوستان هستم.

AlirezaBahredar
چهارشنبه 12 دی 1386, 10:53 صبح
یک عادت خیلی بدددددددد......
من نمیدونم چرا هرکسی در مورد یک چیزی(مخصوصا بحث شبکه) اطلاعات کافی نداره هی میگه INDY !!!!!!!!!!!.
آخه داداش من وفتی یک چیزی رو کامل نمی دونی هی الکی نگو Indy Indy....
Indy یک کامپوننت فوق العاده هست.ولی اگه مطمئن هستید که می تونید یک نفررو راهنمایی کنید در مورد اون اظهار نظر کنید.کلی گویی نکنید.
اما در مورد سئوال دوستمون.
دوست عزیز یک راه ساده استفاده از همان دستور netstat -a است.
لازم نیست که از دستورات winexe,shellexe استفاده کنی با کمک برنامه ضمیمه می تونی نتیجه یکCommand رو توی یک Memo داشته باشی.
موفق باشی.

DAMAVAND
چهارشنبه 12 دی 1386, 11:19 صبح
با تشکر از شما
بله از این روشی که گفتید امکان پذیر هست . من خودم از این روش استفاده کرده بودم .
ولی گفتم باید یه راهی باشه که با خود ابزارهای دلفی این کار رو انجام داد.

sasan_1364
چهارشنبه 12 دی 1386, 17:00 عصر
این لیست کامپیوترهای شبکه رو بر می گرونه

نمی دونم کمک کنه یا نه :




type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;

function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;

Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings);

procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;

begin
ScanLevel(Nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);
end;