چرا گنو/لینوکس رو دوست دارم؟ چون خط فرمانش یه ابزار کامله

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

خوب آی پی شبکه رو میشه از روی صفحه روتر دید. این آدرس اون صفحست: ۱۹۲.۱۶۸.۱.۲۵۴/status/status_deviceinfo.htm و برای رفتن به اون صفحه هم یوزر (admin) پسورد (۱۲۳۴) می‌خواد. حالا باید یه جوری به خط فرمان بگم که این صفحه رو بخونه. برای این کار از دستور curl استفاده می‌کنم:
[bash]
curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm
[/bash]
سوییچ s می‌گه مرراحل دریافت نشون داده نشه. خروجی این دستور یه سری کد html اه. بعد باید تو خروجی دنبال IP Address بگردم. چون خود آی پی تو خط بعد از خطی که کلمه IP Address توشه، با سوییچ A1 می‌م هر جا این بود، خط بعدیش رو هم نمایش بده. تا حالا دستورمون این شده:
[bash]
curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm | grep ‘IP Address’ -A1
[/bash]
توی خروجی، آی پی تو خط آخره، پس باید خط آخر رو بکشم بیرون:
[bash]
curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm | grep ‘IP Address’ -A1
| tail -n1
[/bash]
حالا یه خط دارم که آی پی توشه، کد html هم توشه. کد html از کاراکتر > شروع می‌شه. با دستور کات می‌گم رشته ورودی رو با اون کاراکتر بشکون و فیلد اول رو برگردون:
[bash]
curl -s admin:1234@192.168.1.254/status/status_deviceinfo.htm | grep ‘IP Address’ -A1
| tail -n1 | cut -d’<' -f1 [/bash] والسلام. آی پیم رو دارم. با این که از قبل کلا می‌دونستم این دستورا هستن، بازم اونا رو با سرچ و سعی و خطا کنار هم چیدم. ولی کل فرایند ۱۰ دقیقه بیشتر ازم وقت نگرفت.

فیسبوق و تور در اوبونتو

این عمو ویلترچی یه کاری کرده آدم جرات نمی‌کنه مث بچه آدم بنویسه.

الغرض: من تو اوبونتو از تور استفاده می‌کنم (راهنمای نصب). مشکل این بود که چه با استفاده از تور و چه با فی پی عن، فایرفاکس عزیز بار اول فیسبوق رو باز می‌کرد، اما دفعه‌های بعدی نه!

این سری از فایل log‌ تور قضیه رو پیگیری کردم و دیدم که ظاهرا قضیه مربوط به اینه که فایرفاکس آی پی یه سری از دی ان اس ها رو fetch می‌کنه. درباره این مشکل و راه حلش اینجا و اینجا توضیح داده شده. به طور خلاصه برای حل مشکل کافیه وارد صفحه about:config شد و مقدار network.proxy.socks_remote_dns رو به true تغییر داد.

قصه hostname

قضیه این بود که اسم کامپیوتر محترم لینوکسی رو موقع نصب یه چیز ناچسبی گذشته بودم. اما بعد تصمیم گرفتم اسمش رو به یه چیزی مثل goodname عوض کنم.

اسم کامپیوتر رو میشه با
[bash]
hostname
[/bash]
دید. برای عوض کردنش هم با مثلا
[bash]
hostname goodname
[/bash]
اسم دستگاه عوض می‌شه.

اما بعد عوض کردن اسم دستگاه حضرت mpi تصمیم گرفتند که جواب ندن. خطای محترم هم چیزی تو مایه‌های

failed gethostbyname

بود. از روی خطا شستم خبردار شد که مشکل باید یه جایی تو تعویض همین اسم hostname باشه. رفتم سراغ گوگل و به اینجا رسیدم. خلاصه مطلب اینکه باید تو فایل محترم ‪/etc/hosts‬ هم اسم hostname جدید اعمال بشه.

کپی فایل روی شبکه لینوکسی: scp

این مدت که گیر شبکه بازی افتادم نیاز دارم فایلهام رو روی شبکه اینور و اونور کپی کنم. اون هم با استفاده از ترمینال.

خوشبختانه قضیه خیلی سادست. کافیه به جای دستور cp از دستور scp مخفف secure copy استفاده کنم.

مثلا برای کپی فایل ‪/home/x/testfile‬ از روی یه کامپیوتر با آی پی ۱۹۲.۱۶۸.۱.۵ روی کامپیوتر خودم:

[bash]

scp elmi@192.168.1.5/home/x/testfile /home/elmi/

[/bash]

خیلی راحت و ردیف.

port forwarding برای دسترسی راه دور به ssh

یه مشکل کوچولو داشتم اونم این که می‌خواستم از راه دور به یه کامپیوتر تو شرکت از طریق ssh وصل بشم و کارش رو کنترل کنم.
ssh خیلی خلاصه یعنی اینکه از تو یه کامپیوتر دیگه آدم بتونه به ترمینال یه دستگاه دیگه دسترسی داشته باشه.
شرکت آی پی استاتیک داره. با این آی پی من می‌تونم به مودم شرکت وصل بشم، اما از اونجا به به بعد مودم نمی‌دونه که من رو به کدوم کامپیوتر هدایت کنه.
راه حل استفاده از port forwardingه. یعنی چی؟ یعنی اینکه با این روش به مودم شرکت می‌گم که هروقت دیدی یکی پشت یه پورت مشخصه اون درخواست رو رد کن به یه آی پی مشخص تو شبکه محلی.
مثلا فرض کنید آی پی کامپیوتر من تو شرکت ۱۹۲.۱۶۸.۱.۵ هست. خود ssh هم از پورت ۲۲ استفاده می‌کنه. من میرم تو صفحه تنظیمات مودم (با وارد کردن آی پی مودم تو یه browser) و بعد از وارد شدن میرم به صفحه nat و میگم از این به بعد هر چی درخواست رو پورت ۵۰۰۰۰ تا ۵۰۰۰۰ داشتی رو روی پورت ۲۲ کامپیوتر ۱۹۲.۱۶۸.۱.۵ فوروارد کن. به همین سادگی. حالا از این به بعد برای وصل شدن به اون کامپیوتر (با فرض اینکه آی پی استاتیک شرکت باشه ۴.۴.۴.۴) می‌زنم:
[shell]
ssh elmi@4.4.4.4:50000
[/shell]
تا اینجا راحت می‌تونم به کامپیوترم تو شرکت وصل بشم و کارش رو کنترل کنم. اما یه مشکل کوچولو دارم: حفظ کردن آی پی استاتیک شرکت خیلی هم ساده نیست. بنابراین میرم و تو cpanel سایت خودم تو DNS Zone Editor یه رکورد نوع A ایجاد می‌کنم. رکورد A یه اسم مجازی برای یه آی پی تعریف می‌کنه. مثلا من اینجا name رو دادم x و آدرس رو هم دادم همون آی پی استاتیک شرکت.
حالا برای وصل شدن به کامپیوترم تو شرکت میتونم بزنم:

[shell]
ssh elmi@x.melmi.ir:50000
[/shell]
و تمام!

چند تا نکته:
۱- از همین روش میشه برای remote desktop به یه کامپیوتر ویندوزی استفاده کرد. فقط پورت مورد استفاده میشه ۳۳۸۹.
۲- اگه آی پی استاتیک ندارید نگران نباشید. میشه از سایتهایی مثل dyn dns استفاده کرد. این سایتها یه برنامه بهتون میدن که نصب میکنید و اون برنامه مرتب آی پی شما رو برای اون سایت میفرسته. سایت هم به شما آدرسی مثل yourname.dyndns.com میده که میتونید باهاش به شبکه جایی که میخواید وصل شید. به بیان دیگه این آدرس شبیه آی پی استاتیک عمل می‌کنه.
۳- بعضی از مودمها یه بخش به اسم ddns یا dynamic dns دارن. تو بخش ddns‌ میشه تعریف کرد که از چه سایتی برای نگهداری dns استفاده میکنید و خود مودم کار اون برنامه آپدیت کننده آی پی رو انجام می‌ده.
۴- اگه از روش بالا استفاده می‌کنید، دیگه نمیشه از رکورد نوع A استفاده کنید. در عوض رکوردهای نوع cname‌ این امکان رو میدن که یه آدرس url رو به یه آدرس url دیگه تبدیل کنیم. مثلا در این مثال میشه آدرس x.melmi.ir رو به آدرس yourname.dyndns.com تبدیل کرد.
۴- تو ویندوز خیلی راحت میشه از کلاینت putty برای وصل شدن به کلاینت ssh استفاده کرد.