View Full Version : به دست آوردن IP شبکه محلی
Felony
جمعه 16 مرداد 1388, 19:44 عصر
سلام ،
من میخوام تو برنامم IP شبکه محلی یه سیستم رو بگیرم ، برای این کار یه کامپوننت IDIPWatch رو فرم گزاشتم و کد زیر رو نوشتم :
Ip:=IDIPWatch1.LocalIP;
حالا این کد کار میکنه و IP شبکه ی محلی رو به من میده ولی کافیه تا با اون سیتستم به اینترنت متصل شم ، بعد از اتصال به اینترنت به جای IP شبکه محلی IP کانکشن اینترنت من رو برمیگردونه .
چه طور باید IP شبکه محلی رو بگیرم به طوری که با این مشکل مواجه نشم ؟
tdkhakpur
جمعه 16 مرداد 1388, 23:35 عصر
خوب وقتی به شبکه وصل میشوید سیستم محتوای اون را عوض میکند. و اون همان لوکال شماست.
Felony
جمعه 16 مرداد 1388, 23:41 عصر
خوب وقتی به شبکه وصل میشوید سیستم محتوای اون را عوض میکند. و اون همان لوکال شماست.
این رو که هر کسی میدونه ، اگر کسی در این مورد چیزی میدونه لطفا راه حل ارائه کنه ...
Felony
یک شنبه 18 مرداد 1388, 17:06 عصر
کسی نظری نداره ؟
khazaie01
چهارشنبه 28 مرداد 1388, 09:54 صبح
مشکل من برعکس اینه ! من میخوام IP اینترنت را در بیارم (ADSL) ولی با اینکه به اینترنت وصل هستم بازم آیپی شبکه داخلی را برمیگردونه !
Saeed_m_Farid
چهارشنبه 28 مرداد 1388, 10:29 صبح
سلام ،
من میخوام تو برنامم IP شبکه محلی یه سیستم رو بگیرم
... ولی کافیه تا با اون سیتستم به اینترنت متصل شم ، بعد از اتصال به اینترنت به جای IP شبکه محلی IP کانکشن اینترنت من رو برمیگردونه .
چه طور باید IP شبکه محلی رو بگیرم به طوری که با این مشکل مواجه نشم ؟
مشکل من برعکس اینه ! من میخوام IP اینترنت را در بیارم (ADSL) ولی با اینکه به اینترنت وصل هستم بازم آیپی شبکه داخلی را برمیگردونه !
سلام
شاید سیستم شما دارای IP های متعددی برای کار با توپولوژی های متفاوتی در شبکه ها باشه، قرار نیست که سیستم شما فقط تو شرایط خاص جواب بده (داشتن یک IP، حالا چه با DHCP گرفته باشه، چه استاتیک) علاوه بر این دلیل تعویض IP موقع اتصال به اینترنت تغییر Gateway شما است که تشخیص Gateway قبلی و ... زیاد کار مناسبی نیست.
به نظر من شما باید تمام IP ها رو در لحظه ای که لازم دارید بگیرید و برنامه هست که باید تصمیم بگیره کدومش بدرد میخوره و قابلیت کاری که شما میخواهید انجام بدید رو داشته باشه، تابع زیر تمام IP های سیستم رو برمی گردونه (البته توجه کنید که نیاز به هدرفایل Winsock داره) :
function GetAllComputerIPAddress(): TStrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
i: Integer;
p: PHostEnt;
s: Array[0..128] of char;
pPtr: PaPInAddr;
wsaData: TWSAData;
begin
WSAStartup(MAKEWORD(2, 2), wsaData);
Result := TStringList.Create;
Winsock.gethostname(@s,128);
p := gethostbyname(@s);
pPtr := PaPInAddr(p^.h_addr_list);
i := 0;
while pPtr^[i] <> nil do
begin
Result.Add(inet_ntoa(pptr^[i]^));
Inc(i);
end;
WSACleanup();
end;
البته اگه بخواهید IP یه host غیر از سیستم خودتون رو بدست بیارید باید از تابع زیر استفاده کنید :
function GetAllIPAddress(host: string): TStrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
i: Integer;
p: PHostEnt;
pPtr: PaPInAddr;
wsaData: TWSAData;
begin
WSAStartup(MAKEWORD(2, 2), wsaData);
Result := TStringList.Create;
p := gethostbyname(PChar(host));
if (p <> nil) then begin
pPtr := PaPInAddr(p^.h_addr_list);
i := 0;
while pPtr^[i] <> nil do
begin
Result.Add(inet_ntoa(pptr^[i]^));
Inc(i);
end;
end;
WSACleanup();
end;
موفق باشید.
khazaie01
جمعه 13 شهریور 1388, 11:05 صبح
روی یکی از سیستم های شبکه محلی (کلاینت... اینترنت را از سرور میگیره) برنامه کلاینت / سرور اجرا شده (سرورش) حالا میخوایم از اینترنت و خارج از شبکه محلی با کلاینت به سرور (نرم افزار سرور) وصل بشیم !
اون سیستم فقط آیپی شبکه داخلی خودش را داره چجوری میشه تو اینترنت به اون دستیابی داشت ؟ اصلا میشه ؟
khazaie01
دوشنبه 16 شهریور 1388, 10:26 صبح
نمیشه ... ؟
babakmomeni
دوشنبه 16 شهریور 1388, 16:14 عصر
با سلام خدمت دوست عزیز آقا/خانم khazaei01
این مشکل رو ما هم به نوعی توی محل کارمون داشنیم به این ترتیب که برنامه سرور روی سرور یا یکی از ایستگاههای شبکه محلی کارخونه بود و نیاز بود که از دفتر مرکزی هم کلاینت ها باهاش کانکت باشن. مسئله رو با سرویس دهنده مون مطرح کردیم و راه حلها به این قرار بودش:
1- یا باید با پرداخت هزیته نسبتا گزاف آی پی استاتیک بگیریم. چون بهتر از من قطعا می دونین آی پی اینترنتی که شما دارین از طرف gateway آی اس پی به شما داده شده و آی پی اصلی اینترنتی شما و همه ایستگاههای کاری دیگه در حقیقت یکی هستش. راه تستش هم اینه که از طریق سایت http://www.ip-adress.com ای پی های ایستگاههای مختلف از جمله خود سرور رو ببینین و خواهید دید که همه یکی هستن.
2- راه دوم که کم هزینه تره ولی طبعا محدوده این بودش (ما هم همین قصه رو انتخاب کردیم) سرویس اینترنت رو هم برای دفتر و هم برای کارخونه از یک ای اس پی گرفتیم و تقاضای یک تانل کردیم که باعث میشه یک پل از طریق اینترنت بین شبکه دفتر و کارگاه برقرار بشه و سیستم های دو طرف بتونن همدیگر رو ببینن. جالب کارشون هم اینه که با برقرار شدن تانل ای پی های قابل مشاهده همون ای پی های شبکه محلی هر طرف هستن و به راحتی پینگ میشن.
روش دوم زمانی میتونه کارکرد داشته باشه که محل واقعی کلاینت و سرور معلوم باشه و اون امکانی که من ازش صحبت کردم وجود داشته باشه. وگرنه که باید از روش اول استفاده بفرمایین.
حالا اگه هر کدوم رو پیاده کردین دیگه فرقی نداره برنامه هاتون چی باشه و با چه زبانی بخواین بنویسین یا بهتره این جوری بگم که من راه حل برنامه نویسی واسه این قضیه ندارم چون فکر کنم این مشکل از برنامه نویسی حاصل نمیشه که راهش هم اون باشه.
آخر سر می خوام از دوستان عزیز خواهش کنم اگه راه دیگه ای هم هستش بگن تا من هم تستش کنم چون این دو داستان که عرض کردم صرفا روشهایی بود که من می دونستم و معنیش قطعا این نیست که راه دیگه ای نباشه.
Felony
دوشنبه 16 شهریور 1388, 18:40 عصر
دوستان عزیز احتمالا شما قوانین سایت رو تا به حال نخوندین !
هر سوال در تاپیکی جداگانه ...
khazaie01
سه شنبه 17 شهریور 1388, 09:15 صبح
دوستان عزیز احتمالا شما قوانین سایت رو تا به حال نخوندین !
هر سوال در تاپیکی جداگانه ...
بله درسته... با این سوال موضوع تاپیک را عوض کردم .ببخشید اشتباه از من بود و دوست عزیزمنون فقط جواب سوال من را دادن ....
فکر کنم این موضوع ربطی به برنامه نویسی نداره و بهتره این موضوع را در تالار شبکه مطرح کنم ...
ممنووووووووون
Ebrahim Asadi
چهارشنبه 22 مهر 1388, 14:19 عصر
سلام
از كد زير مي توانيد براي به دست آوردن IP محلي استفاده كنيد:
function GetLocalIP: string;
var
WsaData: TWSAData;
P: PHostEnt;
S: array[0..128] of char;
begin
WSAStartup(MAKEWORD(1,1), WsaData);
GetHostName(@s, 128);
P := GetHostByName(@s);
Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
WSACleanup;
end;
فايل WinSock را بايد به ليست Uses برنامه اضافه كنيد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.