{ lib, stdenv, fetchFromGitHub, fetchzip, makeWrapper, autoreconfHook, pkg-config, openssl, libgcrypt, cmocka, expect, sqlite, pcre2, # Linux libpcap, zlib, wirelesstools, iw, ethtool, pciutils, libnl, usbutils, tcpdump, hostapd, wpa_supplicant, screen, # Cygwin libiconv, # options enableExperimental ? true, useGcrypt ? false, enableAirolib ? true, enableRegex ? true, useAirpcap ? stdenv.hostPlatform.isCygwin, }: let airpcap-sdk = fetchzip { pname = "airpcap-sdk"; version = "4.1.1"; url = "https://support.riverbed.com/bin/support/download?sid=l3vk3eu649usgu3rj60uncjqqu"; hash = "sha256-kJhnUvhnF9F/kIJx9NcbRUfIXUSX/SRaO/SWNvdkVT8="; stripRoot = false; extension = "zip"; }; in stdenv.mkDerivation rec { pname = "aircrack-ng"; version = "1.7"; src = fetchFromGitHub { owner = "aircrack-ng"; repo = "aircrack-ng"; rev = version; hash = "sha256-niQDwiqi5GtBW5HIn0endnqPb/MqllcjsjXw4pTyFKY="; }; postPatch = lib.optionalString stdenv.hostPlatform.isLinux '' substituteInPlace lib/osdep/linux.c --replace-warn /usr/local/bin ${ lib.escapeShellArg ( lib.makeBinPath [ wirelesstools ] ) } ''; configureFlags = [ (lib.withFeature enableExperimental "experimental") (lib.withFeature useGcrypt "gcrypt") (lib.withFeatureAs useAirpcap "airpcap" airpcap-sdk) ]; nativeBuildInputs = [ pkg-config makeWrapper autoreconfHook ]; buildInputs = lib.singleton (if useGcrypt then libgcrypt else openssl) ++ lib.optionals stdenv.hostPlatform.isLinux [ libpcap zlib libnl iw ethtool pciutils ] ++ lib.optional (stdenv.hostPlatform.isCygwin && stdenv.hostPlatform.isClang) libiconv ++ lib.optional enableAirolib sqlite ++ lib.optional enableRegex pcre2 ++ lib.optional useAirpcap airpcap-sdk; nativeCheckInputs = [ cmocka expect ]; postFixup = lib.optionalString stdenv.hostPlatform.isLinux '' wrapProgram "$out/bin/airmon-ng" --prefix PATH : ${ lib.escapeShellArg ( lib.makeBinPath [ ethtool iw pciutils usbutils ] ) } ''; installCheckTarget = "integration"; nativeInstallCheckInputs = [ cmocka expect ] ++ lib.optionals stdenv.hostPlatform.isLinux [ tcpdump hostapd wpa_supplicant screen ]; meta = { description = "WiFi security auditing tools suite"; homepage = "https://www.aircrack-ng.org/"; license = lib.licenses.gpl2Plus; maintainers = with lib.maintainers; [ caralice ]; platforms = with lib.platforms; builtins.concatLists [ linux darwin cygwin netbsd openbsd freebsd illumos ]; changelog = "https://github.com/aircrack-ng/aircrack-ng/blob/${src.rev}/ChangeLog"; }; }