PDA

View Full Version : سوال: کار کردن با IP هاي غيرواقعي



sds1920
یک شنبه 30 بهمن 1390, 15:55 عصر
سلام خدمت دوستان.
سوالي هست که يه مدت بدجوري درگيرم کرده.
همونطور که مي دونيد موقعي که ما به اينترنت وصل مي شيم درواقع IP کامپيوتر ما NAT شده هست و IP واقعي نيست.حالا سوال من اينه ،براي اينکه من توي برنامه بخوام اطلاعات را براي کامپيوتري توي شبکه اينترنت بفرستم که همچين IP داره بايد چکار کنم يعني توي C# بايد چطوري پياده سازي کرد؟

sds1920
دوشنبه 01 اسفند 1390, 15:26 عصر
هيچکس جواب نمي ده؟کمک کنيد خواهشا.

crazyfull
دوشنبه 01 اسفند 1390, 16:04 عصر
اين لينک (http://forum.behtarin.com/showthread.php?t=36807)رو ببين,
يکی از کامپيوتر ها بايد آی پی وليد داشته باشه در غير اين صورت بايد يا آي پی وليد خريداری کنيد

Esmail Solhkhah
دوشنبه 01 اسفند 1390, 17:46 عصر
سلام خدمت دوستان.
سوالي هست که يه مدت بدجوري درگيرم کرده.
همونطور که مي دونيد موقعي که ما به اينترنت وصل مي شيم درواقع IP کامپيوتر ما NAT شده هست و IP واقعي نيست.حالا سوال من اينه ،براي اينکه من توي برنامه بخوام اطلاعات را براي کامپيوتري توي شبکه اينترنت بفرستم که همچين IP داره بايد چکار کنم يعني توي C#‎‎‎‎‎ بايد چطوري پياده سازي کرد؟ قبل از توضیح لازم دونستم این مطلب رو اشاره کنم که استفاده از اصطلاح Ip Valid که معمولا به جای IP Public انجام میشه درست نیست.

ما دونوع IP داریم IP Public - IP Private

IP Public همون IP های ریجستر شده تو اینترنت هستن و قابلیت روتینگ رو تو شبکه اینترنت دارن ولی IP Private ها برای شبکه های خصوصی استفاده میشن

و قابلیت روتینگ رو تو اینترنت ندارن.

IP Valid یعنی IP ای که درست ست شده معتبره و قابل Ping شدن هست.

مثلا شما دوتا IP تو شبکتون ست کردید که با هم کانفلیکت دارن اینجا این IP ها Valid نیستن.

پس بجای IP Vaild برای IP های ریجستر شده تو اینترنت از IP Public استفاده کنید.


بگذریم
در مورد سوال شما :

پکتهای ارسالی از کامپیوتر شما به روتر توسط NAT بررسی شده و آدرس مبدا تو هدر دیتاگرام به IP Public ست میشن و بعد به آدرس مقصد هدایت میشن

همزمان NAT یه رکورد به ازای این درخواست تو NAT Table ذخیره میکنه حالا وقتی جواب درخواست شما از طرف اینترنت اومد NAT با استفاده از جدولش

رکورد مورد نظر رو واکشی میکنه و آدرس مقصد رو برابر آدرس Private شبکه خصوصی شما قرار میده که این درخواست رو به اینترنت فرستاده بود

با این کار ارسال و دریافت از طرف یک شبکه خصوصی به طرف شبکه اینترنت برقرار میشه.

کار NAT اینجا تبدیل IP Private سیستم شما به آدرسی هست که تو اینترنت قابل روتینگ باشه.

حال به سناریوی زیر دقت کنید

یه شبکه محلی داریم که شامل 10 تا کامپیوتر هست و تو مرز این شبکه یه روتر داریم

و این روتر دارای یه IP Public هست ، برقراری ارتباط در داخل شبکه محلی موردی نداره و انجام میشه ولی هرکدوم از این کامپیوتر ها که بخان با اینترنت ارتباط برقرار کنن

طبیعتا برنامه ای روی اونا درحال درخواست این ارتباط هست مثلا براوزرها یا اپلیکیشنها یا سرویسهای سیستم عامل و ...

این کار رو NAT انجام میده ارسال و دریافت داده به و از اون کامپیوتر به طرف شبکه اینترنت رو برقرار میکنه.

حالا مورد اینجاست که ما میخایم یکی از این کامپیوترها قابل دسترسی از طرف شبکه اینترنت باشه

مثلا شما یه نرم افزار کلاینت سرور نوشتید (با سوکت پروگرمینگ Port 5355 - TCP)

کلاینت از طرف اینترنت میخاد به سرور شما وصل بشه که تو یه شبکه محلی هست و دارای IP Private

و طبیعتا درخواست از طرف برنامه کلاینت بعد از عبور از n تا روتر میرسه به روتر شما حالا روتر بیچاره باید از کجا تشخیص بده که

این درخواست رو به کدوم یک از این 10 تا کامپیوتر بفرسته.

اینجا معمولا دوتا راهکار داریم

یکیش Port Forwarding هست که شما برای روتر تعریف میکنید که درخواستهای پورت X رو بفرسته به IP Private خاصی

که مد نظر شماست مثلا IP Private کامپیوتر شما 192.168.1.10 هست و پورتی که استفاده کردید 5355

تو قسمت Port Forwarding روتر این پارامترها رو ست میکنید با این کار درخواستهای رسیده به روتر به ازای این پورت

خاص ارجاع داده میشن به 192.168.1.10 که همون کامپیوتر مد نظر شماست.

راهکار دوم استفاده از DMZ Host هست که از لحاظ امنیتی توصیه نمیکنم این کار رو انجام بدید

(میتونید با تعریف IP Private سیستم مورد نظر در DMZ روتر درخواستهای رسیده رو ارجاع بدید به سیستم مورد نظر

حواستون باشه که اینجا دست فایروال بیچاره یکم بگی نگی بستس)

موفق باشید.

sds1920
سه شنبه 02 اسفند 1390, 18:59 عصر
قبل از توضیح لازم دونستم این مطلب رو اشاره کنم که استفاده از اصطلاح Ip Valid که معمولا به جای IP Public انجام میشه درست نیست.

ما دونوع IP داریم IP Public - IP Private

IP Public همون IP های ریجستر شده تو اینترنت هستن و قابلیت روتینگ رو تو شبکه اینترنت دارن ولی IP Private ها برای شبکه های خصوصی استفاده میشن

و قابلیت روتینگ رو تو اینترنت ندارن.

IP Valid یعنی IP ای که درست ست شده معتبره و قابل Ping شدن هست.

مثلا شما دوتا IP تو شبکتون ست کردید که با هم کانفلیکت دارن اینجا این IP ها Valid نیستن.

پس بجای IP Vaild برای IP های ریجستر شده تو اینترنت از IP Public استفاده کنید.


بگذریم
در مورد سوال شما :

پکتهای ارسالی از کامپیوتر شما به روتر توسط NAT بررسی شده و آدرس مبدا تو هدر دیتاگرام به IP Public ست میشن و بعد به آدرس مقصد هدایت میشن

همزمان NAT یه رکورد به ازای این درخواست تو NAT Table ذخیره میکنه حالا وقتی جواب درخواست شما از طرف اینترنت اومد NAT با استفاده از جدولش

رکورد مورد نظر رو واکشی میکنه و آدرس مقصد رو برابر آدرس Private شبکه خصوصی شما قرار میده که این درخواست رو به اینترنت فرستاده بود

با این کار ارسال و دریافت از طرف یک شبکه خصوصی به طرف شبکه اینترنت برقرار میشه.

کار NAT اینجا تبدیل IP Private سیستم شما به آدرسی هست که تو اینترنت قابل روتینگ باشه.

حال به سناریوی زیر دقت کنید

یه شبکه محلی داریم که شامل 10 تا کامپیوتر هست و تو مرز این شبکه یه روتر داریم

و این روتر دارای یه IP Public هست ، برقراری ارتباط در داخل شبکه محلی موردی نداره و انجام میشه ولی هرکدوم از این کامپیوتر ها که بخان با اینترنت ارتباط برقرار کنن

طبیعتا برنامه ای روی اونا درحال درخواست این ارتباط هست مثلا براوزرها یا اپلیکیشنها یا سرویسهای سیستم عامل و ...

این کار رو NAT انجام میده ارسال و دریافت داده به و از اون کامپیوتر به طرف شبکه اینترنت رو برقرار میکنه.

حالا مورد اینجاست که ما میخایم یکی از این کامپیوترها قابل دسترسی از طرف شبکه اینترنت باشه

مثلا شما یه نرم افزار کلاینت سرور نوشتید (با سوکت پروگرمینگ Port 5355 - TCP)

کلاینت از طرف اینترنت میخاد به سرور شما وصل بشه که تو یه شبکه محلی هست و دارای IP Private

و طبیعتا درخواست از طرف برنامه کلاینت بعد از عبور از n تا روتر میرسه به روتر شما حالا روتر بیچاره باید از کجا تشخیص بده که

این درخواست رو به کدوم یک از این 10 تا کامپیوتر بفرسته.

اینجا معمولا دوتا راهکار داریم

یکیش Port Forwarding هست که شما برای روتر تعریف میکنید که درخواستهای پورت X رو بفرسته به IP Private خاصی

که مد نظر شماست مثلا IP Private کامپیوتر شما 192.168.1.10 هست و پورتی که استفاده کردید 5355

تو قسمت Port Forwarding روتر این پارامترها رو ست میکنید با این کار درخواستهای رسیده به روتر به ازای این پورت

خاص ارجاع داده میشن به 192.168.1.10 که همون کامپیوتر مد نظر شماست.

راهکار دوم استفاده از DMZ Host هست که از لحاظ امنیتی توصیه نمیکنم این کار رو انجام بدید

(میتونید با تعریف IP Private سیستم مورد نظر در DMZ روتر درخواستهای رسیده رو ارجاع بدید به سیستم مورد نظر

حواستون باشه که اینجا دست فایروال بیچاره یکم بگی نگی بستس)

موفق باشید.


ممنون.خيلي خوب بود.فقط قسمت آخر رو من نفهميدم.Port Forwarding يا DMZ Host رو چطوري مي تونم ست کنم؟
توي کدوم کامپيوتر؟کدوم نرم افزار يا سرويس؟
من که به کامپيوتر ISP که NAT Server هست دسترسي ندارم.

hjran abdpor
سه شنبه 02 اسفند 1390, 19:15 عصر
سلام ذوست عزیز.
جواب های داش اسماعیل همیشه کامل و عالی هستن در ادامه در مورد Port forwarding این را بگم که معمولا شما تو سسیتم عامل های شبکه اینکار را انجام میدید ، NAT/PAT که معولا همراه ه پیاده سازی میشوند ، اما در مورد .Port Forwarding هم این را بگم : شما فرض کنید با یک PC به نت وصل میشوید اگه قرار باشه که برای هر IP Private یک IP public داشته باشیم دیگه باید در اینترنت را تخته کرد و بس .... این وسط .Port Forwarding
میاد یه بانک اطلاعاتی تو روتر تشکیل میده و براساس پورت ها عملیات ترجمه ادرس را انجام میده مثلا میگه پورت 6666 مروبوط به وب کامپیوتر 1 و پورت 6667 مربوط به پراکسی pc 1 است و .....

اما DMZ :
DMZ مخفف DeMilitarized Zone كه در اين ناحيه سرورهايي را قرار ميدهيم كه بايستي از اينترنت ديده شوند مانند Web Server، E-Mail Server و DNS Server. اگر بخواهيم DMZ را با يك مثال روشنتر توصيف كنيم، بايستي بگوييم كه DMZ مانند نمايشگاه و فروشگاه يك شركت است كه تقريبا" به همه اجازه داده مي‌شود به داخل آن بيايند و از محصولات ما ديدن كنند، اصولا" نمايشگاه به همين منظور ايجاد شده، فلسفه وجودي Web Server اين است كه از اينترنت ديده شود.
ناحيه ديگري كه در شبكه‌ها وجود دارد، ناحيه Private Network است. هيچ بسته‌اي از طريق اينترنت اجازه ورود به ناحيه اختصاصي شبكه ما را ندارد مگر آنكه يكي از طرف يكي از كاربران داخلي درخواست شده باشد.
پس در ساده‌ترين شكل، شبكه ما از سه ناحيه Public Network، DMZ و Private Network تشكيل شده و در مرز هر كدام از اين نواحي بايستي تمهيدات كنترلي اتخاذ كرده و عبور و مرور بسته‌هاي اطلاعاتي را كنترل كنيم.
من یه پروژه ی قبلا نوشتم همین کار را انجام می دهد ، اگه پیدا کردم سورس را میزارم .

موفق باشید.

mrbm_2007
سه شنبه 02 اسفند 1390, 19:40 عصر
می تونی از یک سرور واسط هم استفاده کنی. هر دو کامپیور هر کدوم از طریق یه برنامه وصل بشن به همین سرور و بعد تبادل اطلاعات انجام بشه. اینجوری هر کامپیوتر خودش به سرور وصل میشه و لازم نیست IP Public داشته باشه

sds1920
سه شنبه 02 اسفند 1390, 19:53 عصر
سلام ذوست عزیز.
جواب های داش اسماعیل همیشه کامل و عالی هستن در ادامه در مورد Port forwarding این را بگم که معمولا شما تو سسیتم عامل های شبکه اینکار را انجام میدید ، NAT/PAT که معولا همراه ه پیاده سازی میشوند ، اما در مورد .Port Forwarding هم این را بگم : شما فرض کنید با یک PC به نت وصل میشوید اگه قرار باشه که برای هر IP Private یک IP public داشته باشیم دیگه باید در اینترنت را تخته کرد و بس .... این وسط .Port Forwarding
میاد یه بانک اطلاعاتی تو روتر تشکیل میده و براساس پورت ها عملیات ترجمه ادرس را انجام میده مثلا میگه پورت 6666 مروبوط به وب کامپیوتر 1 و پورت 6667 مربوط به پراکسی pc 1 است و .....

اما DMZ :
DMZ مخفف DeMilitarized Zone كه در اين ناحيه سرورهايي را قرار ميدهيم كه بايستي از اينترنت ديده شوند مانند Web Server، E-Mail Server و DNS Server. اگر بخواهيم DMZ را با يك مثال روشنتر توصيف كنيم، بايستي بگوييم كه DMZ مانند نمايشگاه و فروشگاه يك شركت است كه تقريبا" به همه اجازه داده مي‌شود به داخل آن بيايند و از محصولات ما ديدن كنند، اصولا" نمايشگاه به همين منظور ايجاد شده، فلسفه وجودي Web Server اين است كه از اينترنت ديده شود.
ناحيه ديگري كه در شبكه‌ها وجود دارد، ناحيه Private Network است. هيچ بسته‌اي از طريق اينترنت اجازه ورود به ناحيه اختصاصي شبكه ما را ندارد مگر آنكه يكي از طرف يكي از كاربران داخلي درخواست شده باشد.
پس در ساده‌ترين شكل، شبكه ما از سه ناحيه Public Network، DMZ و Private Network تشكيل شده و در مرز هر كدام از اين نواحي بايستي تمهيدات كنترلي اتخاذ كرده و عبور و مرور بسته‌هاي اطلاعاتي را كنترل كنيم.
من یه پروژه ی قبلا نوشتم همین کار را انجام می دهد ، اگه پیدا کردم سورس را میزارم .

موفق باشید.

واقعا ممنون ميشم اگه بگذاريد.

Esmail Solhkhah
چهارشنبه 03 اسفند 1390, 11:24 صبح
ممنون.خيلي خوب بود.فقط قسمت آخر رو من نفهميدم.Port Forwarding يا DMZ Host رو چطوري مي تونم ست کنم؟
توي کدوم کامپيوتر؟کدوم نرم افزار يا سرويس؟
من که به کامپيوتر ISP که NAT Server هست دسترسي ندارم. خب Port Forwarding يا DMZ Host رو که دوست عزیزمون جناب hjran abdpor (http://barnamenevis.org/member.php?60488-hjran-abdpor) توضیح دادن

و اما برای تنظیم این پارامترها شما نیازی به دسترسی به NAT روتر ISP ندارید
شما باید از روتر خودتون برای این تنظیمات استفاده کنید ، احتمال قوی روتر شما روتر مودم هست ، برای این کار پشت دستگاه رو ببینید معمولا IP دستگاه رو مینویسن عمدتا بصورت 192.168.1.1 هست این آدرس رو تو براوزرتون وارد کنید تا وارد صفحه کانفیگ مودم بشید اینجا معمولا نام کاربر admin هست و رمزش رو هم تو پشت همون دستگاه نوشتن ، اگه نیست از شرکت مربوطه که خرید کردید سوال کنید،بعد از وارد شدن به صفحه تنظیمات میتونید هرکدوم از این پارامترها رو خاستید ست کنید ، بعدش سیو کرده و یه بار از همون صفحه مودم رو ریبوت کنید.

موفق باشید.

sds1920
پنج شنبه 04 اسفند 1390, 17:48 عصر
خیلی جالب بود.تست می کن خبرشو می دم.ممنون

Collector
پنج شنبه 04 اسفند 1390, 19:36 عصر
سلام

من هم این سوال را دارم.
امکان داره با Http کار کرد واسط یک اسکریپت PHP باشه ؟
و آن اسکریپت بین برنامه Client\Server ارتباط برقرار کند ؟