blob: d8477fd9e1a2ab0d85a330d64b6a23b7ba2cb33b [file] [log] [blame]
# Install Npcap on the machine.
# Config:
$npcap_oem_file = "npcap-1.60-oem.exe"
$npcap_oem_hash = "91e076eb9a197d55ca5e05b240e8049cd97ced3455eb7e7cb0f06066b423eb77"
# Note: because we need the /S option (silent), this script has two cases:
# - The script is runned from a master build, then use the secure variable 'npcap_oem_key' which will be available
# to decode the very recent npcap install oem file and use it
# - The script is runned from a PR, then use the provided archived 0.96 version, which is the last public one to
# provide support for the /S option
function checkTheSum($file, $hash) {
$_chksum = $(CertUtil -hashfile $file SHA256)[1] -replace " ",""
if ($_chksum -ne $hash){
Write-Error "Checksums do NOT match !"
return 1, $file
}
return 0, $file
}
function DownloadNPCAP_free {
$file = $PSScriptRoot+"\npcap-0.96.exe"
$hash = "83667e1306fdcf7f9967c10277b36b87e50ee8812e1ee2bb9443bdd065dc04a1"
# Download the 0.96 file from nmap servers
wget "https://npcap.com/dist/npcap-0.96.exe" -UseBasicParsing -OutFile $file
return checkTheSum $file $hash
}
function DownloadNPCAP_oem {
# Unpack the key
$user, $pass = (Get-ChildItem Env:npcap_oem_key).Value.replace("`"", "").split(",")
if(!$user -Or !$pass){
Throw (New-Object System.Exception)
}
$file = $PSScriptRoot+"\"+$npcap_oem_file
# Download oem file using (super) secret credentials
$pair = "${user}:${pass}"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$headers = @{ Authorization = $basicAuthValue }
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
try {
Invoke-WebRequest -uri (-join("https://npcap.com/oem/dist/",$npcap_oem_file)) -OutFile $file -Headers $headers -Credential $credential
} catch [System.Net.WebException],[System.IO.IOException] {
Write-Error "Error while dowloading npcap oem!"
Write-Warning $Error[0]
return 1, $file
}
return checkTheSum $file $npcap_oem_hash
}
if (Test-Path Env:npcap_oem_key){ # Key is here: on master
$success, $file = DownloadNPCAP_oem
if ($success -ne 0){
$success, $file = DownloadNPCAP_free
}
} else { # No key: PRs
$success, $file = DownloadNPCAP_free
}
if ($success -ne 0){
Write-Error ('Npcap installation of '+$file+' arborted !')
exit 1
}
Write-Output ('Installing: ' + $file)
# Run installer
$process = Start-Process $file -ArgumentList "/loopback_support=yes /winpcap_mode=no /S" -PassThru -Wait
if($process.ExitCode -eq 0) {
echo "Npcap installation completed !"
exit 0
} else {
Write-Error "Npcap installation failed !"
exit 1
}