بخش های سایت
انتخاب سردبیر:
- پوسته های استفاده نشده با نام مستعار برای ماین کرافت
- چرا بازی ها در ویندوز راه اندازی نمی شوند چرا بازی ها کار نمی کنند
- دانلود minecraft برای اندروید: همه نسخه ها
- دانلود مود برای ماین کرافت 1
- پوست پسر با 10 حرف انگلیسی
- ModPack Zeus002 در اینجا بسته مود World Of Tanks را دانلود کنید
- چرا ماین کرافت برای من کار نمی کند؟
- بهترین سرورهای ماین کرافت با مودها
- بهترین حالتها برای حالتهای Minecraft View برای نسخه 1
- بهترین حالتها برای Minecraft مدهای مکانیکی برای Minecraft 1
تبلیغات
تحلیلگرهای بسته شبکه Wireshark (رهگیر بسته های شبکه) نحوه بررسی پورت با استفاده از wireshark |
طرح کلیدنباله مراحلی که یک برنامه با استفاده از کتابخانه pcap (از PacketCAPture) باید برای تکمیل کار خود انجام دهد به شرح زیر است:
بیایید مراحل ذکر شده را با جزئیات در نظر بگیریم. تعریف رابطبرای تعیین رابطی که در آن باید گوش دهید، می توانید از دو روش استفاده کنید. اولین مورد این است که نام رابط توسط کاربر مشخص می شود. برنامه زیر را در نظر بگیرید: #عبارتند از کاربر رابط را با ارسال نام آن به عنوان اولین آرگومان به برنامه ما مشخص می کند. به طور طبیعی، رابط کاربری مشخص شده باید وجود داشته باشد. راه دوم این است که نام رابط را از خود کتابخانه پیدا کنید: #عبارتند از در این مورد، pcap نام رابطی را که در اختیار دارد به ما می دهد. خط errbuf حاوی توضیحاتی از خطا در هنگام اجرای فراخوانی ()pcap_lookupdev خواهد بود. باز کردن یک رابط برای رهگیری بسته هابرای ایجاد یک جلسه رهگیری ترافیک، باید تابع ()pcap_open_live را فراخوانی کنید. نمونه اولیه این تابع (از صفحه pcap man) به صورت زیر است: Pcap_t *pcap_open_live (char *دستگاه، int snaplen، int promisc، int to_ms، char *ebuf) آرگومان اول نام دستگاهی است که در مرحله قبل تعریف کردیم. snaplen یک عدد صحیح است که حداکثر تعداد بایت های یک فریم شبکه را که توسط کتابخانه گرفته می شود را مشخص می کند. اگر promisc روی true تنظیم شود، رابط وارد حالت به اصطلاح promiscuous می شود (بسته های خطاب به ایستگاه های دیگر در شبکه رهگیری می شوند). to_ms - وقفه در میلی ثانیه (اگر مقدار روی صفر تنظیم شود، خواندن تا اولین خطا رخ می دهد، اگر روی منهای یک تنظیم شود - بی نهایت). در نهایت، errbuf خطی است که در آن پیام خطا را دریافت خواهیم کرد. تابع دسته جلسه (توصیفگر) را برمی گرداند. برای نشان دادن، اجازه دهید به یک قطعه کد نگاه کنیم: #عبارتند از در اینجا یک رابط باز می شود که نام آن در خط somedev نشان داده شده است که نشان می دهد چند بایت از بسته مورد نظر باید ضبط شود (مقدار BUFSIZ در pcap.h تعریف شده است). رابط شبکه به حالت بیوقفه تغییر میکند. داده ها تا زمانی که خطایی رخ دهد خوانده می شوند. در صورت بروز خطا، می توانید توضیحات متنی آن را با استفاده از نشانگر errbuf روی صفحه نمایش دهید. نکته ای در مورد رهگیری ترافیک در حالت های بی بند و باری: این دو روش بسیار متفاوت هستند. در مورد رهگیری ترافیک در حالت غیر بی بند و باری، گره تنها ترافیکی را دریافت می کند که به آن هدایت شده یا مربوط به آن است. فقط ترافیک به، از و از طریق میزبان توسط برنامه ما رهگیری می شود. در حالت بیوقفه، رابط شبکه تمام بستههایی را که از طریق کابل وارد میشوند را میپذیرد. در یک محیط بدون سوئیچ، این می تواند تمام ترافیک شبکه باشد. مزیت واضح آن این است که تعداد بیشتری از بسته ها را برای ضبط فراهم می کند، که بسته به اینکه جریان شبکه را برای چه چیزی می گیرید ممکن است (یا نه) مفید باشد. با این حال، رهگیری ترافیک در حالت غیرقانونی قابل تشخیص است. یک گره دیگر می تواند با دقت بالا تعیین کند که آیا ما از حالت promiscuous استفاده می کنیم یا خیر. علاوه بر این، فقط در محیطهای بدون سوئیچ (مانند هاب یا سوئیچهایی که با بستههای arp پر شدهاند) کار میکند. ثالثاً، اگر شبکه به شدت بارگذاری شود، برنامه ما از مقدار زیادی از منابع سیستم استفاده می کند. فیلترینگ ترافیکاغلب یک رهگیر بسته برای رهگیری نه همه، بلکه فقط بسته های خاص مورد نیاز است. به عنوان مثال، مواقعی وجود دارد که می خواهیم در جستجوی رمز عبور، ترافیک پورت 23 (تلنت) را رهگیری کنیم. یا شاید بخواهیم فایلی را که از طریق پورت 21 ارسال می شود (FTP) رهگیری کنیم. شاید ما فقط می خواهیم رهگیری کنیم ترافیک DNS(پنجاه و سومین پورت UDP). در هر صورت، به ندرت نیاز به رهگیری همه داده ها است. توابع pcap_compile() و pcap_setfilter() برای فیلتر کردن ترافیک استفاده می شوند. هنگامی که ما ()pcap_open_live را فراخوانی کردیم و یک جلسه ضبط ترافیک عملکردی داشتیم، میتوانیم فیلتر خود را اعمال کنیم. به طور طبیعی، میتوانید فیلتر را به صورت دستی با تجزیه هدرهای ETH/IP/TCP پس از دریافت بسته پیادهسازی کنید، اما استفاده از فیلتر داخلی pcap کارآمدتر و همچنین سادهتر است. قبل از اینکه بتوانید فیلتری را اعمال کنید، باید آن را "کامپایل" کنید. عبارت فیلتر در یک رشته معمولی (آرایه کاراکتر) ذخیره می شود. نحو چنین عباراتی به تفصیل در صفحه man tcpdump (man tcpdump) توضیح داده شده است. تابع pcap_compile() برای کامپایل فیلتر استفاده می شود. نمونه اولیه آن به شکل زیر است: int pcap_compile(pcap_t *p، ساخت bpf_program *fp، char *str، int optimize، bpf_u_int32 netmask) اولین آرگومان دسته (توصیفگر) جلسه ما است (pcap_t *handle در مثال قبلی). آرگومان بعدی یک اشاره گر به ناحیه ای در حافظه است که نسخه کامپایل شده فیلتر خود را در آن ذخیره می کنیم. بعد خود عبارت فیلتر به شکل یک رشته منظم می آید. پارامتر بعدی تعیین می کند که آیا عبارت ما نیاز به بهینه سازی دارد یا خیر (طبق معمول، 0 به معنای خیر، 1 به معنای بله است). آخرین پارامتر netmask است که فیلتر ما روی آن اعمال می شود. تابع در صورت بروز خطا، -1 را برمی گرداند، تمام مقادیر دیگر نشان دهنده تکمیل موفقیت آمیز هستند. هنگامی که عبارت کامپایل شد، باید اعمال شود، که با استفاده از تابع ()pcap_setfilter انجام می شود. نمونه اولیه آن این است: int pcap_setfilter (pcap_t *p، ساخت bpf_program *fp) آرگومان اول دستگیره (توصیفگر) جلسه رهگیری بسته ما است، دومی نشانگر نسخه کامپایل شده عبارت فیلتر است (معمولاً آرگومان دوم تابع pcap_compile()). مثال زیر استفاده از فیلتر را نشان می دهد: #عبارتند از این برنامه یک رهگیر برای بسته هایی که به پورت 23 یا از پورت 23 می روند، در حالت غیرقانونی، روی رابط eth0 آماده می کند. مثال حاوی تابع ()pcap_lookupnet است که برمی گردد آدرس شبکهو ماسک شبکه برای دستگاهی که نام آن به عنوان پارامتر به آن ارسال شده است. استفاده از آن ضروری است زیرا برای اعمال فیلتر باید آدرس و ماسک شبکه را بدانیم. رهگیری بسته هادو تکنیک رهگیری بسته وجود دارد. شما می توانید یک بسته را در یک زمان رهگیری و پردازش کنید، یا می توانید با تنظیم یک حلقه خاص با گروهی از بسته ها کار کنید که تا زمانی که pcap تعداد مشخصی از بسته ها را رهگیری کند اجرا می شود. برای کار در حالت اول از تابع ()pcap_next استفاده می شود. نمونه اولیه ()pcap_next: U_char *pcap_next(pcap_t *p، ساخت pcap_pkthdr *h) آرگومان اول دستگیره جلسه ما است، دومی اشاره گر به ساختاری است که اطلاعات مربوط به بسته در آن ذخیره می شود، مانند زمان رهگیری، طول بسته و طول بخش جداگانه آن ( برای مثال، اگر بسته تکه تکه شده باشد). ()pcap_next یک اشاره گر u_char را به محل حافظه که بسته توصیف شده توسط این ساختار در آن ذخیره می شود، برمی گرداند. نمایش استفاده از ()pcap_next برای گرفتن یک بسته: #عبارتند از این برنامه بسته هایی را بر روی دستگاهی که ()pcap_lookupdev برمی گرداند، رهگیری می کند و آن را در حالت پرمخاطب قرار می دهد. بسته ای را شناسایی می کند که از طریق پورت 23 (تلنت) می آید و اندازه آن را بر حسب بایت نمایش می دهد. فراخوانی ()pcap_close یک جلسه ضبط باز را می بندد. روش جایگزین، اگرچه درک آن دشوارتر است، اما احتمالاً مفیدتر است. بسته های بسیار کمی (در صورت وجود) وجود دارد که از ()pcap_next استفاده می کنند. در اکثر موارد از pcap_loop() یا pcap_dispatch() استفاده می کنند (که به نوبه خود از pcap_loop() استفاده می کند. برای درک استفاده از این دو تابع، باید ایده توابع پاسخ به تماس را درک کنید. توابع برگشت به تماس یک تکنیک برنامه نویسی پرکاربرد است. اصل بسیار ساده است. فرض کنید برنامه ای دارید که منتظر رویدادی است. برای مثال، برای پردازش یک ضربه کلید. هر بار که یک کلید فشار داده می شود، می خواهم تابعی را فراخوانی کنم که آن رویداد را مدیریت می کند. تابعی که من از آن استفاده میکنم یک تابع پاسخ به تماس است. هر بار که کاربر کلیدی را فشار می دهد، برنامه من یک تابع تماس را فراخوانی می کند. توابع Callback در pcap استفاده میشوند، اما به جای اینکه وقتی کاربر کلیدی را فشار میدهد، آنها را هنگام دریافت بسته دیگری فراخوانی میکند. ()pcap_loop و ()pcap_dispatch توابعی هستند که از مکانیسم تابع callback تقریباً به روشی مشابه استفاده می کنند. هر دو یک تابع callback را هر بار که pcap بسته ای را که از فیلتر عبور می کند رهگیری می کند (مگر اینکه فیلتر کامپایل شده و در جلسه اعمال شود، در غیر این صورت تمام بسته های رهگیری شده به تابع callback ارسال می شوند) فراخوانی می کنند. نمونه اولیه تابع pcap_loop(): Int pcap_loop (pcap_t *p، int cnt، pcap_handler callback، u_char *user); اولین آرگومان هندل جلسه ما است. عدد صحیح بعدی به pcap_loop() میگوید که تعداد کل بستهها باید جمعآوری شود (مقدار منفی به این معنی است که بستهها باید تا زمانی که خطا رخ دهد ضبط شوند). آرگومان سوم نام تابع callback است (فقط نام، بدون پرانتز). آخرین آرگومان در برخی از برنامه ها استفاده می شود، اما معمولاً به سادگی روی NULL تنظیم می شود. ()pcap_dispatch تقریباً یکسان است، تنها تفاوت این است که توابع چگونه زمانبندی را مدیریت میکنند، که مقدار آن هنگام فراخوانی ()pcap_open_live تنظیم میشود. ()pcap_loop برخلاف pcap_dispatch() به سادگی از وقفه های زمانی چشم پوشی می کند. جزئیات در man pcap موجود است. قبل از اینکه مثالی از نحوه استفاده از pcap_loop() ارائه دهیم، باید به فرمت تابع callback خود نگاه کنیم. ما نمی توانیم خودسرانه یک نمونه اولیه تابع callback تعریف کنیم زیرا ()pcap_loop نمی داند با آن چه کند. نمونه اولیه تابع callback ما باید به صورت زیر باشد: void got_packet (u_char *args, const struct pcap_pkthdr *header, const u_char *packet); بیایید نگاهی دقیق تر به آن بیندازیم. ابتدا تابع یک مقدار خالی (void) برمی گرداند. این منطقی است زیرا ()pcap_loop نمی تواند بداند با مقدار بازگشتی چه کند. آرگومان اول همان آرگومان آخر pcap_loop() است. هر مقداری که به عنوان آخرین آرگومان برای ()pcap_loop استفاده می شود، هر زمان که از ()pcap_loop فراخوانی شود، به عنوان اولین آرگومان به تابع callback ارسال می شود. آرگومان دوم هدر pcap است که حاوی اطلاعاتی درباره زمان ضبط بسته، اندازه آن و غیره است. ساختار pcap_pkthdr در pcap.h به صورت زیر تعریف شده است: Struct pcap_pkthdr ( struct timeval ts; // timestamp bpf_u_int32 caplen; // طول قسمت ضبط شده بسته bpf_u_int32 len; // طول کل بسته ); آخرین آرگومان تابع callback جالب ترین است. این یک اشاره گر به یک بافر است که در واقع شامل کل بسته ای است که با استفاده از ()pcap_loop گرفته شده است. چگونه از متغیر بسته استفاده کنیم؟ بسته حاوی ویژگیهای زیادی است، بنابراین همانطور که میتوانید تصور کنید، در واقع یک رشته نیست، بلکه مجموعهای از ساختارها است (به عنوان مثال، یک بسته TCP/IP حاوی یک اترنت، ip، سربرگ tcp و خود داده است). پارامتر بسته که از نوع u_char است، در واقع یک نسخه سریالی از این ساختارها است. برای به دست آوردن داده های مفید از این ساختارها، باید تغییراتی را انجام دهیم. اول از همه، باید ساختارهایی در برنامه تعریف شده داشته باشیم که از آنها استفاده خواهیم کرد. ما از ساختارهای زیر استفاده خواهیم کرد (در واقع میتوانیم آنها را مستقیماً از فایلهای هدر بگیریم، اما نام فیلدهای ساختارها از پلتفرم به پلتفرم متفاوت است، بنابراین برای اهداف نمایشی استفاده میشود): Struct sniff_ethernet ( u_char ether_dhost; u_char ether_shost; u_short ether_type; /* IP? ARP? RARP? etc */ ); // ساختار هدر IP sniff_ip ( #if BYTE_ORDER == LITTLE_ENDIAN u_int ip_hl:4, ip_v:4; #endif #if BYTE_ORDER == BIG_ENDIAN u_int ip_v:4, /* نسخه */ ip_hl:4; /* طول سرصفحه */ #endif /* نه _IP_VHL */ u_char ip_tos؛ u_short ip_len؛ u_short ip_id؛ u_short ip_off؛ #define IP_RF 0x8000 /* Reserved fragment flag */ #define IP_DF 0x4000 /* dont fragmente 0x4000 /* dont fragmente 0x20 *_/ flag */ #define IP_OFFMASK 0x1fff /* mask برای تکه تکه کردن بیت ها */ u_char ip_ttl؛ /* زمان زنده ماندن */ u_char ip_p؛ /* پروتکل */ u_short ip_sum؛ /* checksum */ struct in_addr ip_src,ip_dst؛ /* منبع و آدرس مقصد */ )؛ struct sniff_tcp ( u_short th_sport; u_short th_dport; tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgment number */ #if BYTE_ORDER == LITTLE_END_THIAN *:4-th_unt, . * افست داده */ #endif #if BYTE_ORDER == BIG_ENDIAN u_int th_off:4، /* داده افست */ th_x2:4؛ /* (استفاده نشده) */ #endif u_char th_flags؛ #define TH_FIN 0x01 #define THx02 #defin TH_RST 0x04 #تعریف TH_PUSH 0x08 #تعریف TH_ACK 0x10 #تعریف TH_URG 0x20 #تعریف TH_ECE 0x40 #تعریف TH_CWR 0x80 #تعریف TH_FLAGS \ (THS_FLAGS \ (TH_ST_FN| _ECE|TH_CWR) u_short th_win؛ /* پنجره */ u_short th_sum؛ /* checksum */ u_short th_urp; /* urgent pointer */ ); اگر از توضیحات ساختار از فایلهای هدر استاندارد استفاده میشود، گاهی اوقات برای اینکه برنامهای که از توضیحات هدر TCP استفاده میکند بدون خطا کامپایل کند، لازم است قبل از گنجاندن فایلهای هدر، نماد _BSD_SOURCE تعریف شود. راه جایگزین- ساختارهایی را تعریف کنید که هدر TCP را به صورت دستی توصیف می کنند. pcap به طور طبیعی دقیقاً از همان ساختارها هنگام گرفتن بسته ها استفاده می کند. سپس به سادگی یک رشته u_char (بافر) ایجاد می کند و داده ها را از ساختارها در آن کپی می کند. چگونه یک رشته را به ساختارها تجزیه کنیم؟ این به راحتی با استفاده از اشاره گر و تبدیل نوع انجام می شود. ابتدا، بیایید متغیرهایی را که برای تجزیه بسته u_char نیاز داریم در هدرهای جداگانه اعلام کنیم: Const struct sniff_ethernet *ethernet; const struct sniff_ip *ip; ساختار const sniff_tcp *tcp; const char *payload; int size_ethernet = sizeof(struct sniff_ethernet); int size_ip = sizeof(struct sniff_ip); int size_tcp = sizeof(struct sniff_tcp); اکنون تبدیل نوع را انجام می دهیم: اترنت = (struct sniff_ethernet*)(packet); ip = (struct sniff_ip*) (packet + size_ethernet); tcp = (struct sniff_tcp*) (packet + size_ethernet + size_ip); محموله = (u_char *) (بسته + size_ethernet + size_ip + size_tcp); پس از این می توانیم به فیلدهای تمام ساختارها به روش معمول دسترسی داشته باشیم، به عنوان مثال: اگر (tcp->th_flags & TH_URG) ( ... ); ... printf("TTL = %d\n", ip->ip_ttl); خاموش شدنوقتی کارتان تمام شد، باید جلسه را ببندید. این کار با استفاده از تابع ()pcap_close انجام می شود. هر یک از اعضای تیم ][ ترجیحات خود را در رابطه با نرم افزار و ابزارهای کمکی دارد Wiresharkنت کتاگر در مورد رهگیری داده ها صحبت کنیم، پس ماینر شبکهاز روی آنتن گرفته خواهد شد پوسته پوسته شدنسایت اینترنتی: ابزاری قدرتمند برای هر هکری که باید داشته باشد بسته بندیسایت اینترنتی: یک توسعه جالب که از یک طرف امکان تولید هر یک را فراهم می کند مانیتور علاوه بر اتصال به کانال انتقال داده باید داشته باشد روش موثرشناسایی بسته های IP که به محض رسیدن آنها را رهگیری کنید. پروتکل های لایه کاربردی معمولاً با یک پورت TCP خاص ارتباط برقرار می کنند، برای مثال، HTTP از porg 80 استفاده می کند. برای نظارت بر ترافیک HTTP، مانیتور بسته می تواند خود را محدود به در نظر گرفتن ترافیک TCP در پورت 80 کند. این تصمیم را می توان برای هر بسته خاص توسط تجزیه و تحلیل فیلد پروتکل در هدر IP و شماره پورت مبدا و مقصد در هدر TCP. با این حال، جداسازی تمام ترافیک HTTP بسیار دشوار است. برخی از وبسایتها از این پورت استفاده نمیکنند، اما از پورتهای 8000 یا 8080 استفاده میکنند. بعلاوه، برخی از برنامهها ممکن است از طریق پورت 80 با استفاده از پروتکل دیگری ارتباط برقرار کنند. اگرچه پورت ها به برنامه های خاص اختصاص داده می شوند، اما توسعه دهنده برنامه یا مدیر سیستمممکن است این دستورالعمل ها را نادیده بگیرد و از پورت 80 برای برنامه ای با استفاده از پروتکل دیگری استفاده کند. علاوه بر این، وب دارای یک پروتکل HTTPS است که از پورت 443 استفاده می کند. یک مانیتور بسته می تواند با نظارت بر ترافیک TCP که حاوی پورت 443 به عنوان شماره پورت مبدا و مقصد است، ترافیک HTTPS را ضبط کند. با این حال، داده های ارسال شده از طریق HTTPS با استفاده از یک لایه سوکت امن رمزگذاری می شوند. SSL). مانیتور نمی تواند پیام های HTTP ارسال شده از طریق این اتصالات TCP را شناسایی کند. با این حال، می تواند ترافیک TCP در پورت 443 را به منظور محاسبه آمارهای اولیه مانند تعداد اتصالات و بایت های منتقل شده با استفاده از HTTPS رهگیری کند. سایر انتقالات آغاز شده توسط مرورگر وب ممکن است از پروتکل های لایه برنامه متفاوت استفاده کنند. در برخی موارد، این ترافیک را می توان با نظارت بر پورت های اختصاص داده شده به این پروتکل ها رهگیری کرد. با این حال، تعدادی از برنامه ها از پروتکل هایی استفاده می کنند که به صورت پویا شماره پورت ها را هنگام انتقال داده ها اختصاص می دهند. به عنوان مثال، سرویس گیرنده و سرور پروتکل انتقال فایل (FTP) می توانند به صورت پویا شماره پورت اتصال TCP مورد استفاده برای انتقال داده را انتخاب کنند. به همین ترتیب، بسیاری از پروتکلهای پخش رسانه معمولاً از شماره پورت خاصی برای انتقال دادههای صوتی و تصویری استفاده نمیکنند، همانطور که بعداً در بخش 14.4.4 با جزئیات بیشتر مورد بحث قرار خواهد گرفت. رهگیری ترافیک با هدرهای IP و TCP خاص مستلزم اعمال فیلتر بر روی بسته های IP در هنگام رسیدن است. فیلتر کردن بستهها در اسرع وقت هزینههای سربار مربوط به کپی و پردازش بستههایی را که پس از آن دور ریخته میشوند، کاهش میدهد. مانیتور بسته ممکن است نرم افزار annarate خاصی داشته باشد که بسته ها را هنگام دریافت طبقه بندی می کند. کارت شبکه. اگر پشتیبانی سالانه وجود نداشته باشد، بسته ها ممکن است توسط سیستم عامل یا برنامه فیلتر شوند. تعداد زیادی از برنامه های نظارت بر بسته ها به ابزار tcpdump متکی هستند. LJLM، Tcpj بر اساس فیلتر بسته برکلی (BPF) |
خواندن: |
---|
محبوب:
جدید
- چرا بازی ها در ویندوز راه اندازی نمی شوند چرا بازی ها کار نمی کنند
- دانلود minecraft برای اندروید: همه نسخه ها
- دانلود مود برای ماین کرافت 1
- پوست پسر با 10 حرف انگلیسی
- ModPack Zeus002 در اینجا بسته مود World Of Tanks را دانلود کنید
- چرا ماین کرافت برای من کار نمی کند؟
- بهترین سرورهای ماین کرافت با مودها
- بهترین حالتها برای حالتهای Minecraft View برای نسخه 1
- بهترین حالتها برای Minecraft مدهای مکانیکی برای Minecraft 1
- بررسی سرعت اینترنت: مروری بر روشها چگونه سرعت واقعی اینترنت را از ارائهدهنده خود بفهمیم