PDA

View Full Version : دریافت بنر (اطلاعات) پورت UDP یک ip



farzad3333
یک شنبه 14 خرداد 1396, 19:12 عصر
با سلام خدمت دوستان و اساتید محترم
همونطور که مستحضر هستید ما تو شبکه از دو نوع پروتکل رایج TCP و UDP استفاده میکنیم
اطلاعاتی که از طریق پروتکل TCP بدست میان شامل اطلاعات Header یک ip و ftp و اطلاعات دیگری هست که بکمک کلاس Socket براحتی بدست میان
اما قسمت پروتکل UDP کمی متفاوت هست
پروتکل UDP یعنی یک ارسال کننده اطلاعات و یک دریافت کننده اطلاعات یعنی Send و Recive بین یک برنامه مثلا چت
حالا سوال من اینه چجوری میشه یک send به یک ip مشخص داشته باشیم و داده یا probe ازش دریافت کنیم یعنی یکطرفه بفرستیم و اون ip تحریک بشه و اطلاعاتش رو به ما بده که مشخصاتش چیه تا بتونیم اطلاعات این پروب رو که بصورت هگز هست رو تحلیل و دریافت کنیم (مثل اطلاعات هدر) ؟
من بکمک نرم افزار nmap بررسی میکنم پورت مورد نظر باز هست و دیتا رو هم ارسال میکنم ولی هیچ چیزی دریافت نمیکنم
با تشکر فراوان

_behnam_
دوشنبه 15 خرداد 1396, 15:57 عصر
سلام دوست عزیز.
مطمعن هستید ک ارتباط با سرور باید از طریق UDP انجام بشه؟
ببینید این چیزی که شما فرمودید در مورد تفاوت UDP و TCP نمیشه گفت صحیح هستش.
وقتی شما از TCP استفاده میکنید که اطلاعات مهمی ردوبدل بشه و نیاز داشته باشه که گیرنده حتما اطلاعات رو صحیح دریافت کنه و اگه اطلاعات صحیح دریافت نشد و تایید دریافت به فرستنده نرسید ، فرستنده مجددا ارسال میکنه . مثل یک برنامه چت ک پیام متنی ارسال میشه و به مخاطب میرسه حتی اگه با ضعیترین شبکه اینترنت هم باشید.
اما در UDP اینجور نیستش و فرستنده بدون بررسی تایید دریافت از گیرنده ، دیتاهارو ارسال میکنه . در UDP حتی اگه دیتا توسط گیرنده دریافت نشه یا با خطا مواجه بشه به هیچ وجه مجددا اطلاعات رو نمیفرسته. مثل تماس صوتی ، که وقتی وسط صحبت یه مشکلی پیش بیاد صحبت هایی که شنونده نتونسته بشنوه مجددا تکرار نمیشه.

لینک های زیر چندین مثال از UDP هستش. بررسی کنید

https://social.msdn.microsoft.com/Forums/en-US/92846ccb-fad3-469a-baf7-bb153ce2d82b/simple-udp-example-code?forum=netfxnetcom
https://www.codeproject.com/Articles/2614/Testing-TCP-and-UDP-socket-servers-using-C-and-NET
https://msdn.microsoft.com/en-us/library/w89fhyex.aspx

farzad3333
دوشنبه 15 خرداد 1396, 20:11 عصر
واقعا ممنون از توجه و راهنماییتون
ببینید شما نرم افزارهایی مثل nmap و یا ابزار open source ای مثل zmap یا masscan رو دیدید
من هم تقریبا همچین چیزی مد نظرم هست برای مرحله اول یعنی ip بگیرم و در مرحله بعد روی یکسری پورت که شامل tcp و udp هست این ip رو اسکن کنم و هدر یا مشخصاتشون رو دریافت کنم
کلاس socket برای پورتهای udp کار میکنه ولی کل پورتها رو باز نشون میده و نمیتونه دقیق باز یا بسته بودن پورت رو تشخیص بده
پس باید راهکار دیگه ای برای اینکار وجود داشته باشه و اون ارسال پیام به پورت و منتظر دریافت نتیجه ماندن هست
من تمام مثالهایی که تو اینترنت نگاه میکنم برنامه دو طرفه هستند یعنی یه برنامه سرور و یه برنامه کلاینت ولی من اینجور نمی خوام حتی مثالهایی که شما زحمت کشیدید و فرستادید هم اینجور بودند
من یچیزی می خوام یه پیام به ip و پورت بفرستم و اطلاعاتش رو مثل اطلاعات هدر پورت 80 tcp دریافت کنم
من اینکار رو تقریبا یبار کردم ولی همش با خطای 10060 مواجه میشم
یعنی من می خوام با ارسال پیام و تحریک پورت نتیجه ای از سرور دریافت کنم


باز هم از پاسخ شما ممنونم

_behnam_
دوشنبه 15 خرداد 1396, 20:29 عصر
من فرض رو میزارم بر این که شما میخواید به یه وب سرور وصل بشید و اطلاعات رو بگیرید.
چندجا دیگه هم گفتم که باید از سوکت استفاده کرد اما خوب توی سی شارپ ساخت یه سوکت با امکانات کامل کلی زمان میبره. پس بهتره از Winsock.NET استفاده کنید.
اگه تعداد آیپی هایی ک میخواید بهشون وصل بشید زیاد هستن ، مثلا فرض کنید لیست پروxy وصل بشید و اطلاعات ردوبدل کنید. تمام اونها سالم نیستند و ممکنه حدود 20 درصد اصلا اتصال برقرار نشه.
پس راه خودتون راه درستی هست. باید به همه سرورها درخواست بفرستید و لیستی از سوکت ایجاد کنید. اونهایی ک ارور میدن از لیست حذف شن و فقط اونهایی که اتصال برقرار کردن رو نگه داریدو بقیه مراحل رو انجام بدید.
لینک dll سوکت
https://www.codeproject.com/Articles/11422/Winsock-NET
برای نحوه ارسال و دریافت من نمیتونم کمکی کنم چون اصلا نمیدونم قرار است به چه سروری وصل بشید . اما اگه وب سرور هستش که پورت 80 مثال زیاد هست. اگه هم از سرورهای معروف هستن میتونی راحت مثال اتصال رو پیدا کنی.