123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #!/usr/bin/python
- #
- # Example nfcpy to wpa_supplicant wrapper for WPS NFC operations
- # Copyright (c) 2012, Jouni Malinen <j@w1.fi>
- #
- # This software may be distributed under the terms of the BSD license.
- # See README for more details.
- import os
- import sys
- import time
- import nfc
- import nfc.ndef
- import wpactrl
- wpas_ctrl = '/var/run/wpa_supplicant'
- def wpas_connect():
- ifaces = []
- if os.path.isdir(wpas_ctrl):
- try:
- ifaces = [os.path.join(wpas_ctrl, i) for i in os.listdir(wpas_ctrl)]
- except OSError, error:
- print "Could not find wpa_supplicant: ", error
- return None
- if len(ifaces) < 1:
- print "No wpa_supplicant control interface found"
- return None
- for ctrl in ifaces:
- try:
- wpas = wpactrl.WPACtrl(ctrl)
- return wpas
- except wpactrl.error, error:
- print "Error: ", error
- pass
- return None
- def wpas_tag_read(message):
- wpas = wpas_connect()
- if (wpas == None):
- return
- print wpas.request("WPS_NFC_TAG_READ " + message.encode("hex"))
- def wps_tag_read(tag):
- if len(tag.ndef.message):
- message = nfc.ndef.Message(tag.ndef.message)
- print "message type " + message.type
- for record in message:
- print "record type " + record.type
- if record.type == "application/vnd.wfa.wsc":
- print "WPS tag - send to wpa_supplicant"
- wpas_tag_read(tag.ndef.message)
- break
- else:
- print "Empty tag"
- print "Remove tag"
- while tag.is_present:
- time.sleep(0.1)
- def main():
- clf = nfc.ContactlessFrontend()
- try:
- while True:
- print "Waiting for a tag to be touched"
- while True:
- tag = clf.poll()
- if tag == None:
- continue
- if tag.ndef:
- wps_tag_read(tag)
- break
- if tag:
- print "Not an NDEF tag - remove tag"
- while tag.is_present:
- time.sleep(0.1)
- break
- except KeyboardInterrupt:
- raise SystemExit
- finally:
- clf.close()
- raise SystemExit
- if __name__ == '__main__':
- main()
|