|
|
@ -1,4 +1,5 @@
|
|
|
|
Function Get-DNSTXT {
|
|
|
|
# Simple Powershell client, also runs on linux with Powershell Core
|
|
|
|
|
|
|
|
Function Get-DnsTxt {
|
|
|
|
[CmdletBinding()] param(
|
|
|
|
[CmdletBinding()] param(
|
|
|
|
[string] $Domain
|
|
|
|
[string] $Domain
|
|
|
|
)
|
|
|
|
)
|
|
|
@ -9,18 +10,18 @@ Function Get-DNSTXT {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Function Get-DNSFile {
|
|
|
|
Function Get-DnsFile {
|
|
|
|
[CmdletBinding()] param(
|
|
|
|
[CmdletBinding()] param(
|
|
|
|
[string] $Filename = $(Read-Host -Prompt 'Enter a Filename'),
|
|
|
|
[string] $FileName = $(Read-Host -Prompt 'Enter a FileName'),
|
|
|
|
[string] $DNSName = $(Read-Host -Prompt 'Enter a DNSName'),
|
|
|
|
[string] $DnsName = $(Read-Host -Prompt 'Enter a DnsName'),
|
|
|
|
[switch] $Execute,
|
|
|
|
[switch] $Execute,
|
|
|
|
[switch] $Write,
|
|
|
|
[switch] $Write,
|
|
|
|
[string] $OutPath
|
|
|
|
[string] $OutPath
|
|
|
|
)
|
|
|
|
)
|
|
|
|
$count = [int](Get-DNSTXT -Domain "$Filename.count.$DNSName")
|
|
|
|
$count = [int](Get-DnsTxt -Domain "$FileName.count.$DnsName")
|
|
|
|
$file_base64 = ""
|
|
|
|
$file_base64 = ""
|
|
|
|
For ($i=0; $i -le $count; $i++) {
|
|
|
|
For ($i=0; $i -le $count; $i++) {
|
|
|
|
$file_base64 += (Get-DNSTXT -Domain "$Filename.$i.$DNSName")
|
|
|
|
$file_base64 += (Get-DnsTxt -Domain "$FileName.$i.$DnsName")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
"Base64 $file_base64"
|
|
|
|
"Base64 $file_base64"
|
|
|
|
$file_string = [Text.Encoding]::Utf8.GetString([Convert]::FromBase64String($file_base64))
|
|
|
|
$file_string = [Text.Encoding]::Utf8.GetString([Convert]::FromBase64String($file_base64))
|
|
|
@ -31,21 +32,22 @@ Function Get-DNSFile {
|
|
|
|
$file_string | Out-String
|
|
|
|
$file_string | Out-String
|
|
|
|
}
|
|
|
|
}
|
|
|
|
If ($Write.IsPresent) {
|
|
|
|
If ($Write.IsPresent) {
|
|
|
|
$file_string | Out-File -FilePath ($OutPath, $Filename)[!$OutPath]
|
|
|
|
$file_string | Out-File -FilePath ($OutPath, $FileName)[!$OutPath]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Function Push-DNSFile {
|
|
|
|
Function Push-DNSFile {
|
|
|
|
[CmdletBinding()] param(
|
|
|
|
[CmdletBinding()] param(
|
|
|
|
[string] $Filename = $(Read-Host -Prompt 'Enter a Filename'),
|
|
|
|
[string] $FileName = $(Read-Host -Prompt 'Enter a Filename'),
|
|
|
|
[string] $DNSName = $(Read-Host -Prompt 'Enter a DNSName')
|
|
|
|
[string] $DnsName = $(Read-Host -Prompt 'Enter a DnsName')
|
|
|
|
)
|
|
|
|
)
|
|
|
|
$content_id = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes((Get-FileHash -Path $Filename).ToString())).Substring(0,6)
|
|
|
|
$id = (Get-FileHash $FileName | Select-Object Hash | Format-Table -HideTableHeaders | Out-String).Trim()
|
|
|
|
$content_binary = Get-Content -Path $Filename -Encoding utf8
|
|
|
|
$id = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($id)).Substring(0,6)
|
|
|
|
|
|
|
|
$content_binary = Get-Content -Path $FileName -Encoding utf8
|
|
|
|
$content_base64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($content_binary))
|
|
|
|
$content_base64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($content_binary))
|
|
|
|
$i = 0
|
|
|
|
$i = 0
|
|
|
|
While ($content_base64) {
|
|
|
|
While ($content_base64) {
|
|
|
|
$url = "."+$i+"-"+$content_id+"u."+$DNSName
|
|
|
|
$url = "."+$i+"-"+$id+"u."+$DnsName
|
|
|
|
$len = 63 - $url.Length
|
|
|
|
$len = 63 - $url.Length
|
|
|
|
if($len -le $content_base64.Length) {
|
|
|
|
if($len -le $content_base64.Length) {
|
|
|
|
$content_part = $content_base64.Substring(0, $len)
|
|
|
|
$content_part = $content_base64.Substring(0, $len)
|
|
|
@ -54,7 +56,7 @@ Function Push-DNSFile {
|
|
|
|
$content_part = $content_base64
|
|
|
|
$content_part = $content_base64
|
|
|
|
$content_base64 = $false
|
|
|
|
$content_base64 = $false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Get-DNSTXT -Domain ($content_part + $url)
|
|
|
|
Get-DnsTxt -Domain ($content_part + $url)
|
|
|
|
$i++
|
|
|
|
$i++
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|