# Simple Powershell client, also runs on linux with Powershell Core
Function Get-DnsTxt {
[ CmdletBinding ( ) ] param ( [ string ] $Domain )
Try {
return ( Resolve-DnsName -Type TXT $Domain ) . Strings
} Catch [ System.Management.Automation.CommandNotFoundException ] {
return dig + short $Domain TXT
}
}
Function Get-DnsFile {
[ CmdletBinding ( ) ] param (
[ string ] $FileName = $ ( Read-Host -Prompt 'Enter a FileName' ) ,
[ string ] $DnsName = $ ( Read-Host -Prompt 'Enter a DnsName' )
)
$count = [ int ] ( Get-DnsTxt -Domain " $FileName .count. $DnsName " )
$file_base64 = " "
For ( $i = 0 ; $i -le $count ; $i + + ) {
$file_base64 + = ( Get-DnsTxt -Domain " $FileName . $i . $DnsName " )
}
[ Text.Encoding ] :: Utf8 . GetString ( [ Convert ] :: FromBase64String ( $file_base64 ) )
}
Function Push-DNSFile {
[ CmdletBinding ( ) ] param (
[ string ] $FileName = $ ( Read-Host -Prompt 'Enter a Filename' ) ,
[ string ] $DnsName = $ ( Read-Host -Prompt 'Enter a DnsName' )
)
$id = [ Convert ] :: ToBase64String ( [ Text.Encoding ] :: UTF8 . GetBytes ( ( Get-FileHash $FileName ) . Hash ) ) . Substring ( 0 , 6 )
$content = [ Convert ] :: ToBase64String ( [ Text.Encoding ] :: UTF8 . GetBytes ( ( Get-Content -Path $FileName ) ) )
$i = 0
While ( $true ) {
$url = " . $i - ${id} u. $DnsName "
$len = 63 - $url . Length
$i + +
if ( $len -lt $content . Length ) {
Get-DnsTxt -Domain ( $content . Substring ( 0 , $len ) + $url )
$content = $content . Substring ( $len )
} else {
Get-DnsTxt -Domain ( $content + $url )
break
}
}
}
# Minimal working example for download in case you have to type it all manually
Function MWE {
param ( [ string ] $f , [ string ] $d )
$c = [ int ] ( ( Resolve-DnsName -Type TXT " $f .count. $d " ) . Strings )
$o = " "
For ( $i = 0 ; $i -le $c ; $i + + ) {
$o + = ( Resolve-DnsName -Type TXT " $f . $i . $d " ) . Strings
}
[ Text.Encoding ] :: Utf8 . GetString ( [ Convert ] :: FromBase64String ( $o ) )
}