| 66 | |
| 67 | |
| 68 | def run(self): |
| 69 | with Airodump(channel=self.target.channel, |
| 70 | target_bssid=self.target.bssid, |
| 71 | skip_wps=True, |
| 72 | output_file_prefix='wps_pin') as airodump: |
| 73 | # Wait for target |
| 74 | self.pattack('Waiting for target to appear...') |
| 75 | self.target = self.wait_for_target(airodump) |
| 76 | |
| 77 | # Start bully |
| 78 | self.bully_proc = Process(self.cmd, |
| 79 | stderr=Process.devnull(), |
| 80 | bufsize=0, |
| 81 | cwd=Configuration.temp()) |
| 82 | |
| 83 | # Start bully status thread |
| 84 | t = Thread(target=self.parse_line_thread) |
| 85 | t.daemon = True |
| 86 | t.start() |
| 87 | |
| 88 | try: |
| 89 | self._run(airodump) |
| 90 | except KeyboardInterrupt as e: |
| 91 | self.stop() |
| 92 | raise e |
| 93 | except Exception as e: |
| 94 | self.stop() |
| 95 | raise e |
| 96 | |
| 97 | if self.crack_result is None: |
| 98 | self.pattack('{R}Failed{W}', newline=True) |
| 99 | |
| 100 | def _run(self, airodump): |
| 101 | while self.bully_proc.poll() is None: |