PDA

View Full Version : تبدیل اسم سیستم به آی پی در شبکه



Mask
پنج شنبه 08 بهمن 1388, 22:36 عصر
من با یه برنامه که یکی از دوستان زحمت کشیدن و دادن اسم سیستم ها رو بدست میارم
چطوری اسم سیستم ها رو تبدیل کنم به آی پی.
یعنی یه اسم سیستم رو دقیقا آی پیشو بدست بیارم.

khazaie01
جمعه 09 بهمن 1388, 10:17 صبح
سلام دوست عزیز





function HostToIP(sHost: string; var sIP: string): Boolean;
var
aHostName: array[0..255] of Char;
pcAddr : PChar;
HostEnt : PHostEnt;
wsData : TWSAData;
begin
WSAStartup($0101, wsData);
try
GetHostName(aHostName, SizeOf(aHostName));
StrPCopy(aHostName, sHost);
hostEnt := GetHostByName(aHostName);
if Assigned(HostEnt) then
if Assigned(HostEnt^.H_Addr_List) then begin
pcAddr := HostEnt^.H_Addr_List^;
if Assigned(pcAddr) then begin
sIP := Format('%d.%d.%d.%d', [Byte(pcAddr[0]), Byte(pcAddr[1]),
Byte(pcAddr[2]), Byte(pcAddr[3])]);
Result := True;
end else
Result := False;
end else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end;
end;

Mask
جمعه 09 بهمن 1388, 12:51 عصر
ممنون دوست عزیز
اما به خط زیر گیر داد و اجرا نشد.

HostEnt : PHostEnt;

khazaie01
جمعه 09 بهمن 1388, 15:11 عصر
Uses
Winsock

Mask
یک شنبه 11 بهمن 1388, 00:00 صبح
ممنون دوست عزیز
هر کاری کردم نتونستم از این تابع استفاده کنم.
اگه ممکنه یه نمونه کار با این تابع رو بزارید.
و در ضمن بنده با یک برنامه گزارشی از سیستمهای شبکه می گیرم که این گزارش گاهی بر اساس اسم سیستم ها است و گاهب بر اساس آی پی.
کلا قصدم این بود چه آی پی چه اسم سیستم هرو تبدیل به اسم سیستم بشوند تا کاربر بتونه گزارش دریافتی رو تشخیص بده و بفهمه از کدوم سیستم هاست.
حالا سوالم اینه که این تابه آیا فقط آی پی سیستم رو به اسم کامپیوتر تغییر میده یا نه؟
بنده می خام چه آی پی و چه اسم سیستم همیشه با استفاده از تابع شما فقط اسم سیستم رو ببینم.
ممنون.

khazaie01
یک شنبه 11 بهمن 1388, 08:13 صبح
شما تو پست اول گفتید میخواین اسم را به IP تبدیل کنید اون سورس که دادم اینکار را میکنه چه مشکلی دارید ؟ تابع را تو یک پروژه بنویسید و فراخوانی کنید...

Var
sIP:String;
Begin
HostToIP('اسم کامپیوتر',sIP);
Caption:=sIP;
.
.
.

ولی تو پست 5 گفتید میخواین IP را به Host تبدیل کنید !

Mask
یک شنبه 11 بهمن 1388, 12:55 عصر
ممنون دوست عزیز
واقعا محبت کردید
من شرمندم
اما یه برنامه دارم که یه سری گزارش از سیستمهای کلاینت میگیره و وقتی به سرور میخاد اعلام کنه گاهی با اسم سیستم ها اعلام میکنه و گاهی با آی پی.
کاربر چون آی پی سیستم هاش اتوماتیک هست نمی تونه تشخیص بده که این آی پی مربوط به کدوم سیستمه.
حالا من می خام گزارشی رو که سیستمهای کلاینت به سرور اعلام می کنند برنامه من اینطور عمل کنه که اگه گزارش بر مبنای اسم سیستم بود که هیچ و اگه آی پی سیستم های کلاینتها رو برگردونده باشه تبدیلش کنه به اسم سیستم تا اپراتور متوجه بشه که این گزارش مربوط به کدوم سیستمه.
مشکلم اینه که اگه آی پی بود تبدیلش کنم به اسم سیستم و اگه اسم بود هم که هیچ.
بازم ممنونم.محبت می کنید وقت میزارید.

khazaie01
یک شنبه 11 بهمن 1388, 13:21 عصر
خواهش میکنم.

اینم برای تبدیل IP به هاست




Uses
IdStackWindows;

procedure TForm1.Button1Click(Sender: TObject);
var
s:TIdStackWindows;
begin
s:=TIdStackWindows.Create;
showmessage(s.WSGetHostByAddr(Edit1.Text));
s.free;
end;

Felony
یک شنبه 11 بهمن 1388, 16:01 عصر
میتونید یک تابع برای تشخیص آدرسIP دریک رشته بنویسید و به راحتی تشخیص بدید مقدار بازگشتی IP هست یا نام سیستم.

khazaie01
یک شنبه 11 بهمن 1388, 16:05 عصر
یا هم که با تابع اولی نام سیستم را به آیپی تبدیل کنید (اگر ورودی تابع آیپی هم باشه بازهم آیپی را برمیگردونه) بعد با تابع دومی آیپی را به نام تبدیل کنید !! (ورودی تابع دومی اگر نام سیستم باشه خطا خواهد داد ...)