نوشتن اسکریپت بدست آوردن رمز WiFi های ذخیره شده در لینوکس با پایتون :: Mr Python | مستر پایتون

نوشتن اسکریپت بدست آوردن رمز WiFi های ذخیره شده در لینوکس با پایتون

  • ۱۱۶۹

نوشتن اسکریپت بدست آوردن رمز WiFi های ذخیره شده در لینوکس با پایتون

درود به همه !

امروز با یک پست لینوکسی در خدمت شما هستیم . درد این پست یاد میگیریم چطور میشه اسکریپتی نوشت که به محض اجرا شدن پسوورد تمام WiFi های ذخیره شده روی سیستم لینوکسی رو به ما نشون بده . با ما همراه باشید

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

دستوری در لینوکس وجود داره به نام nmcli . با استفاده از این دستور میتونیم با NetworkManager کار کنیم و اطلاعات مربوط به شبکه ی سیستم عامل رو ازش بگیری .

دستور زیر لیست SSID  (همون نام WiFi) های ذخیره شده در سیستم رو برمیگردونه :

MrPython@debian:~$ nmcli -g NAME connection show

پس از اجرای دستور بالا میبینیم که لیستی از ssid های موجود در سیستم رو نشون میده :

حالا password ذخیره شده از هرکدومشون رو خواستیم میتونیم با دستور زیر بدست بیاریم :

MrPython@debian:~$ nmcli -s -g 802-11-wireless-security.psk connection show <NAME>

به جای <NAME> اسم وای فای مورد نظر که میخوایم پسووردشو ببینیم رو وارد میکنیم سپس خروجی دستور ، پسوورد WiFi مورد نظره ( به شرطی که اون WiFi پسوورد داشته باشه )

 

تا اینجا میدونیم چه شکلی دستی اینکارو با خط فرمان انجام بدیم . حالا بیاین اسکریپت پایتونی بنویسیم که این کارو خودکار برای بدست آوردن پسوورد تمام WiFi های ذخیره شده انجام بده .

 

اسکریپت :‌

from subprocess import check_output 

ssids = []

command = "nmcli -g NAME connection show" # For get the list of saved ssids
command = command.split(" ") # splitting command by " "

result = check_output(command) # run command
result = result.decode() # decode the output of command
result = result.split("\n") # splitting the result line by line

for ssid in result: # append ssids to ssids list
    if ssid:
        ssids.append(ssid)

for ssid in ssids: # get password for each ssid
    command = "nmcli -s -g 802-11-wireless-security.psk connection show"    
    command = command.split(" ") # splitting command by " "
    command.append(ssid) # append ssid to command list
    result = check_output(command) # run command and get its output
    result = result.decode().strip("\n") # decode and strip \n

    print ("{} -> {}".format(ssid , result)) # print ssid -> password

 

همینجور که میبینید اسکریپت توسط کامنت ها به طور کامل توضیح داده شده . در ابتدا از کتابخونه ی subprocess ، تابع check_output رو ایمپورت کردیم . این تابع میاد یک دستور رو در خط فرمان اجرا میکنه و نتیجه یا خروجی دستور رو برمیگردونه . بعد از اون یه لیست به نام ssids تعریف کردیم که قراره لیستی از نام وای فای های ذخیره شده در سیستم داخلش ذخیره بشه . سپس در متغییر command دستوری که دربالا گفتیم رو نوشتیم (دستوری که لیست نام وای فای های ذخیره شده رو برمیگردونه ) و این دستور رو بر اساس فضای خالی space جداسازی و به لیست تبدیل کردیم (چون تابع check_output باید یک لیست در ورودی بگیره) و اونو به تابع check_output دادیم تا برامون اجرا کنه و نتیجشو بهمون بگه . نتیجشو ریختیم داخل متغییر result و اونو دیکود (از نوع داده بایت به استرینگ تبدیل کردن) کردیم . سپس اونو خط به خط جدا کردیم و با یه حلقه for هر کدوم از ssid ها رو اضافه کردیم به لیست ssids .

تا اینجا ما لیست تمام ssids ها رو داریم . حالا با استفاده از حلقه ی for اومدیم پسوورد تک تک ssid ها رو بدست آوردیم .

برای اینکار دستور بدست آوردن پسوورد از طریق nmcli که بالا گفتیم رو در متغییر command ذخیره کردیم . سپس اسم وای فای رو به آخرش اضافه کردیم و اونو با تابع check_output اجرا کردیم و نتیجش که پسوورد وای فای هست رو بدست آوردیم . این نتیجه رو دیکود کردیم و n\ آخرش رو حذف کردیم .

در نهایت اونو به کاربر نشون دادیم .

 

بعد از اجرای اسکریپت :

 

امیدوارم لذت برده باشید سوالی بود مطرح کنید .

 

یا حق!

Telegram Channel : @mrpythonblog

نظرات: (۰) هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی