معرفی 17 دستور عیب یابی شبکه در لینوکس
پیکربندی شبکه، تشخیص و عیب یابی کلی لینوکس بخشهای ضروری مدیریت سیستم هستند. حتی برای توسعه دهندهای که با سیستمهای لینوکس کار می کند، دانش در مورد دستورات شبکه لینوکس یک مزیت اضافی است.
به طور خاص، اگر میخواهید یک مهندس DevOps شوید یا بخشی از SRE باشید، لازم است همه دستورات عیبیابی لینوکس را بدانید زیرا بخشی از فعالیتهای روزانه شما خواهند بود.
بهترین دستورات شبکه لینوکس و عیب یابی کدامند؟
در زیر لیستی از دستورات عیبیابی بومی موجود است.
توضیحات | دستور |
---|---|
برای بررسی و تنظیم نام میزبان سرور (هاستنیم) | hostname |
برای دریافت جزئیات DNS هاست | host |
بررسی میکند که آیا سرور ریموت با استفاده از پروتکل ICMP قابل دسترسی است. همچنین زمان رفت و برگشت بستهها را نشان میدهد. | ping |
یک ابزار چند پلتفرمی که برای انتقال داده استفاده میشود. میتوان از آن برای عیب یابی چندین مشکل شبکه استفاده کرد. | curl |
ابزاری برای دانلود فایلها میتواند برای عیب یابی اتصالات پروکسی و کانکشن استفاده شود. | wget |
جایگزینی برای ifconfig که میتوان از آن برای پیکربندی و بازیابی اطلاعات در اینترفیسهای شبکه سیستم استفاده کرد | ip |
ابزاری برای مشاهده و مدیریت arp cache | arp |
در درجه اول برای بررسی اتصالات و PID در پورتها و سوکتهای یونیکس استفاده میشود. | ss/netstat |
این ابزار از پروتکل ICMP استفاده میکند و hopهای مربوط به خواندن سرور مقصد را پیدا میکند. همچنین زمان بین hop را نشان میدهد. | traceroute |
mtr ترکیبی از ping و traceroute است. همچنین اطلاعات اضافی مانند هاستهای میانی و پاسخگویی را فراهم میکند. | mtr |
کمک میکند تا رکوردهای DNS مرتبط با نام دامنه را دریافت کنید. | dig |
دستوری مشابه dig | nslookup |
ابزاری برای دیباگ سوکتهای TCP/UDP | nc |
میتوان از آن برای تست اتصال ریموت در پورتها استفاده کرد | telnet |
کمک میکند تا تمام اطلاعات route table را دریافت کنید | route |
این ابزار کمک میکند تا پکتهای شبکه را کپچر کرده و آنها را برای مشکلات شبکه تجزیه و تحلیل کنید. | tcpdump |
لیست تمام فایلهای باز و اطلاعات فرآیندی که آن را باز کرده است. | lsof |
بیایید هر دستور را درک کنیم و ببینیم چگونه می توانیم از آن برای عیب یابی لینوکس استفاده کنیم.
نکته مهم: هر دستور یا ابزار ذکر شده در این مطلب دارای گزینهها و پرچمهای زیادی است. هر دستور یک صفحه man دارد و میتوانید از آن برای شناسایی فلگها و گزینههای مورد نیاز برای مورد استفاده خود بهره ببرید. به عنوان مثال، برای دستور ip، فقط میتوانید man ip را در ترمینال تایپ کنید تا تمام جزئیات مربوط به آن دستور را دریافت نمائید.
-
Hostname
دستور Hostname برای مشاهده نام میزبان دستگاه و تنظیم نام میزبان استفاده میشود.
hostname
می توانید از دستور hostname برای تنظیم نام میزبان جدید برای دستگاه استفاده کنید. مثلا،
sudo hostname parsdev.com
اگر نام میزبان را با استفاده از دستور hostnameتنظیم کنید، هنگامی که دستگاه را ریستارت میکنید، نام میزبان به نام مشخص شده در فایل hostname تغییر میکند (etc/hostname/)
بنابراین اگر میخواهید نام میزبان را به طور دائم تغییر دهید، می توانید از فایل /etc/hosts یا فایل hostname مربوطه موجود در سرور استفاده کنید.
- برای ماشین های اوبونتو، می توانید آن را در فایل /etc/hostname تغییر دهید.
- برای RHEL، CentOS و Fedora میتوانید آن را در فایل /etc/sysconfig/network تغییر دهید.
-
host
دستور Host برای جستجوی معکوس IP یا نام DNS است.
به عنوان مثال، اگر میخواهید یک DNS متصل به IP پیدا کنید، میتوانید از دستورات host به صورت زیر استفاده کنید.
host 8.8.8.8
همچنین می توانید برای یافتن آدرس IP مرتبط با نام دامنه برعکس عمل کنید. مثلا،
host parsdev.com
-
ping
ابزار شبکه پینگ برای بررسی اینکه آیا سرور راه دور قابل دسترسی است یا خیر استفاده میشود. در درجه اول برای بررسی اتصال و عیب یابی شبکه استفاده میشود.
جزئیات زیر را ارائه می دهد.
- بایتهای ارسال و دریافت شد
- بستههای (پکت) ارسال، دریافت و گم شده (lost)
- زمان تقریبی رفت و برگشت (بر حسب میلی ثانیه)
دستور Ping دارای سینتکس زیر است.
ping
مثلا،
ping parsdev.com
برای پینگ کردن آدرس IP
ping 8.8.8.8
اگر میخواهید خروجی پینگ را بدون استفاده از ctrl+c متوقف کنید، میتوانید از پرچم «-c» با یک عدد مانند شکل زیر استفاده کنید.
ping -c 1 parsdev.com
-
curl
ابزار Curl در درجه اول برای انتقال دادهها از یا به یک سرور استفاده میشود. با این حال، میتوانید از آن برای عیب یابی شبکه هم استفاده کنید.
برای عیب یابی شبکه، curl از پروتکلهایی مانند DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET و TFTP پشتیبانی میکند
به عنوان مثال، curl می تواند اتصال در پورت 22 را با استفاده از telnet بررسی کند
curl -v telnet://1.1.1.1:22
می توانید اتصال FTP را با استفاده از curl بررسی کنید.
curl ftp://parsdev.net
می توانید اتصال وب سرور را نیز عیب یابی کنید.
curl http://parsdev.com -I
-
wget
دستور wget در درجه اول برای واکشی صفحات وب استفاده میشود.
برای عیب یابی مشکلات شبکه نیز میتوانید از wget استفاده کنید.
به عنوان مثال، می توانید اتصالات پروکسی سرور را با استفاده از wget عیب یابی کنید.
wget -e use_proxy=yes http_proxy=
با واکشی فایلها میتوانید بررسی کنید که آیا یک وبسایت فعال است یا خیر.
wget www.google.com
-
ip (ifconfig)
دستور ip برای نمایش و دستکاری مسیرها و رابطهای شبکه استفاده میشود. دستور ip نسخه جدیدتر ifconfig است. ifconfig در همه سیستمها کار میکند، اما بهتر است به جای ifconfig از دستور ip استفاده کنید.
بیایید به چند نمونه از دستور ip نگاهی بیندازیم.
نمایش دستگاههای شبکه و پیکربندی
ip addr
می توانید از این دستور با pipes و grep استفاده کنید تا خروجی دانه بندی بیشتری مانند آدرس IP رابط eth0 به دست آورید. زمانی که روی ابزارهای اتوماسیون کار میکنید که نیاز به دریافت IP به صورت داینامیک دارند، بسیار مفید است.
دستور زیر آدرس IP رابط شبکه eth0 را دریافت میکند.
ip a | grep eth0 | grep "inet" | awk -F" " '{print $2}'
جزئیات یک اینترفیس خاص را دریافت کنید
ip a show eth0
می توانید جدولهای مسیریابی را لیست کنید.
ip route
ip route list
-
arp
ARP (Address Resolution Protocol) جدول کش آدرسهای IP شبکههای لوکال و آدرسهای MAC را نشان میدهد که سیستم با آنها تعامل داشته است.
arp
خروجی نمونه،
ss (netstat)
دستور ss جایگزینی برای netstat است. همچنان میتوانید از دستور netstat در همه سیستمها استفاده کنید.
با استفاده از دستور ss می توانید اطلاعات بیشتری نسبت به دستور netstat به دست آورید. دستور ss سریع است زیرا تمام اطلاعات را از یوزراسپیس کرنل دریافت میکند.
حالا اجازه دهید نگاهی به چند کاربرد دستور ss بیندازیم.
- لیست کردن همه اتصالات
دستور ss تمام اتصالات سوکت TCP، UDP و Unix را در دستگاه شما لیست میکند.
خروجی دستور ss بزرگ خواهد بود بنابراین می توانید از ss | less برای ایجاد اسکرول در خروجی استفاده کنید.
- فیلتر کردن سوکتهای TCP، UDP و Unix
اگر میخواهید جزئیات سوکت TCP، UDP یا یونیکس را فیلتر کنید، از پرچم "-t" "-u" و "-x" با دستور "ss" استفاده کنید. تمام اتصالات ایجاد شده به پورتهای خاص را نشان می دهد. اگر می خواهید هر دو پورت متصل و گوش دادن را با استفاده از "a" با پرچم خاص مانند شکل زیر لیست کنید.
ss -ta
ss -ua
ss -xa
- لیست تمام پورتهای listening
برای لیست کردن تمام پورتهای لیسنینگ، از پرچم "-l" با دستور ss استفاده کنید. برای فهرست کردن سوکت های TCP، UDP یا UNIX خاص، از پرچم های "-t"، "-u" و "-x" با "-l" مانند شکل زیر استفاده کنید.
- لیست همه ایجاد شده
برای فهرست کردن همه پورت های ایجاد شده، از پرچم ایجاد شده ایالتی مطابق شکل زیر استفاده کنید.
برای فهرست کردن همه سوکت ها در حالت گوش دادن،
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
-
تریسروت (traceroute)
اگر ابزار traceroute در سیستم یا سرور خود ندارید، می توانید آن را از مخزن اصلی نصب کنید.
traceroute یک ابزار عیب یابی شبکه است. با استفاده از traceroute می توانید تعداد پرشهای (hops) مورد نیاز برای رسیدن یک بسته خاص به مقصد را بیابید. شما می توانید مسیر بسته را از سرور خود تا میزبان راه دور ردیابی کنید.
مثلا،
traceroute google.com
در اینجا خروجی است.
خروجی بالا تعداد پرش (12) را برای رسیدن به google.com از سرور نشان میدهد.
این ابزار زمانی مفید است که می خواهید مشکلات مربوط به نرسیدن بسته های شبکه به میزبان را عیب یابی کنید.
-
mtr
ابزار mtr یک ابزار تشخیص شبکه برای عیب یابی تنگناهای (bottlenecks) شبکه است. این عملکرد هر دو ping و traceroute را ترکیب میکند
به عنوان مثال، دستور زیر خروجی traceroute را در زمان واقعی نشان می دهد.
mtr google.com
در اینجا خروجی است.
گزارش mtr
می توانید با استفاده از پرچم –report گزارشی تولید کنید. وقتی گزارش mtr را اجرا می کنید، 10 بسته به مقصد ارسال می کند و گزارش را ایجاد می کند.
mtr -n --report google.com
-
dig
اگر وظیفهای در ارتباط با جستجوی DNS دارید، میتوانید از دستور «dig» برای پرس و جو از سرورهای DNS استفاده کنید.
dig twiter.com ANY
تمام رکوردهای DNS را با dig دریافت کنید
دستور زیر تمام رکوردهای DNS و اطلاعات TTL یک x.com را برمی گرداند
از +short برای دریافت خروجی بدون کلام استفاده کنید.
dig google.com ANY +short
با dig رکورد DNS خاص را دریافت کنید
به عنوان مثال، اگر می خواهید رکورد A را برای نام دامنه خاص دریافت کنید، می توانید از دستور dig استفاده کنید. +short اطلاعات را بدون کلام ارائه می کند
dig www.google.com A +short
به همین ترتیب، می توانید اطلاعات رکورد دیگر را به طور جداگانه با استفاده از دستورات زیر دریافت کنید.
جستجوی معکوس DNS با dig
می توانید با استفاده از دستور زیر یک جستجوی معکوس DNS با dig انجام دهید. 8.8.8.8 را با IP مورد نیاز جایگزین کنید
dig -x 8.8.8.8
-
nslookup
ابزار Nslookup (Name Server Lookup) برای بررسی ورودیهای DNS استفاده میشود. شبیه دستور dig است.
برای بررسی رکوردهای DNS یک دامنه میتوانید از دستور زیر استفاده کنید.
nslookup google.com
همچنین می توانید با آدرس IP جستجوی معکوس انجام دهید.
nslookup 8.8.8.8
برای دریافت تمام رکوردهای DNS یک نام دامنه، می توانید از موارد زیر استفاده کنید.
nslookup -type=any google.com
به طور مشابه، می توانید برای رکوردهایی مانند mx، soa و غیره پرس و جو کنید
-
nc (netcat)
دستور nc (netcat) به عنوان ارتش سوئیس از دستورات شبکه شناخته می شود.
با استفاده از nc، می توانید اتصال سرویسی را که روی یک پورت خاص اجرا می شود، بررسی کنید.
به عنوان مثال برای بررسی باز بودن پورت ssh می توانید از دستور زیر استفاده کنید.
nc -v -n 192.168.33.10 22
netcat همچنین می تواند برای انتقال داده از طریق TCP/UDP و اسکن پورت استفاده شود.
اسکن پورت در محیط های ابری توصیه نمی شود. شما باید از ارائه دهنده ابر درخواست کنید تا عملیات اسکن پورت را در محیط شما انجام دهد.
-
telnet
دستور telnet برای عیب یابی اتصالات TCP در یک پورت استفاده می شود.
برای بررسی اتصال پورت با استفاده از telnet، از دستور زیر استفاده کنید.
telnet 10.4.5.5 22
-
route
دستور route برای دریافت جزئیات جدول route برای سیستم شما و دستکاری آن استفاده میشود. اجازه دهید به چند مثال برای دستور route نگاه کنیم.
لیست تمام مسیرها
دستور Route را بدون هیچ آرگومان اجرا کنید تا تمام مسیرهای موجود در سیستم یا سرور خود را لست کنید.
اگر می خواهید خروجی کامل را به صورت عددی و بدون نام میزبان دریافت کنید، می توانید از پرچم "-n" با دستور route استفاده کنید.
-
tcpdump
دستور tcpdump در درجه اول برای عیب یابی ترافیک شبکه استفاده میشود.
نکته: تجزیه و تحلیل خروجی دستور tcpdump نیاز به یادگیری دارد، بنابراین توضیح آن از حوصله این مقاله خارج است.
دستور tcpdump با رابطهای شبکه سیستم کار میکند. بنابراین باید از امتیازات مدیریتی برای اجرای دستور استفاده کنید.
لیست تمام رابط های شبکه
از دستور زیر برای لیست کردن تمام اینترفیسها استفاده کنید.
sudo tcpdump --list-interfaces
گرفتن بسته ها در رابط خاص
برای دریافت dump بستهها در یک رابط خاص، می توانید از دستور زیر استفاده کنید.
برای متوقف کردن دستور از ctrl + c استفاده نمائید
sudo tcpdump -i eth0
برای محدود کردن کپچر بسته، میتوانید از پرچم -c با شماره استفاده کنید.
sudo tcpdump -i eth0 -c 10
ضبط بسته ها در همه رابط ها
برای گرفتن بسته ها در تمام اینترفیس ها، مطابق شکل زیر از هر پرچم استفاده کنید.
sudo tcpdump -i any
- lsof
lsof دستوری است که در عیب یابی روزانه لینوکس استفاده میشود. این دستور برای هر کسی که با سیستمهای لینوکس کار میکند به همان اندازه مهم است.
برای لیست کردن همه فایلهای باز، دستور lsof را اجرا کنید.
lsof
یکی از خطاهای رایج توسعه دهندگان و مهندسان DevOps، خطای Bind failed error: Address already in use است. با استفاده از دستور زیر می توانید شناسه فرآیند مرتبط با پورت را پیدا کنید. شما می توانید فرآیند را برای آزاد کردن پورت kill کنید.
lsof -i :8080
ابزارهای عیب یابی شبکه شخص ثالث
ابزارهای خط فرمان عیب یابی شبکه بیشتری از راه حل های شخص ثالث موجود است.
شما باید آنها را جداگانه نصب کنید و از آنها برای اهداف عیب یابی خود استفاده کنید. به دلیل رعایت موارد امنیتی، هر سازمانی به شما اجازه انجام این کار را نمیدهد.
با این حال، اگر مجبور به استفاده از ابزارهای شخص ثالث هستید، می توانید آنها را هم بررسی کنید.
ما برخی از اطلاعات ابزار را تحت دسته بندی های مختلف در جدول زیر سازماندهی کرده ایم.
نتیجه
در این مطلب به ابزارهای خط فرمان مهم لینوکس برای عیب یابی و پیکربندی شبکه پرداختهایم.
اگر با نقشهای مدیریت سیستم، DevOps یا SRE شروع میکنید، لازم است در مورد این ابزارها برای پشتیبانی از پروژههایی که روی آنها کار میکنید، یاد بگیرید.
هر ابزار دارای عملکردهای زیادی است و شما می توانید برای برآورده کردن نیازهای خود بیشتر بررسی کنید.
اگر فکر میکنید دستورات مهمی را از دست دادهایم، در بخش نظرات به ما اطلاع دهید.