Linux altında nc, Windows altında ncat ile yerel ağda küçük bir sunucu ve dinleyici kurulabilir. Basit bir yapı için Linux üzerinde bir sunucu oluşturayım.
nc -l 1234
1234/tcp portu ile dinleme başladı. Ya güvenlik duvarı kapalı olmalı, ya da 1234/tcp için kural oluşturulmalı. Benzer şekilde Windows istemci üzerinde de ncat ile bu porta bağlanalım.
ncat 192.168.7.7 1234
Herşey yolunda giderse bu aşamada karşı tarafa bağlantı gerçekleşir. İki bilgisayardan da bu terminallere girilen karakterler karşı tarafa gönderilir. Yani basit bir chat platformu gibi.
Bir de dosya göndermeyi deneyelim. En basit hali ile sunucuyu alıcı olarak yapılandırıp gelen verileri bir dosyaya kaydetmesini isteyelim. Dosyanın şu an için bir txt dosyası olduğunu varsayıyorum.
ncat -l 1234 > dosya.txt
Gönderen Windows makinede de bir dosya seçip gönderelim. Bunu yapmanın iki yolu var. İlki cmd.exe ile.
ncat.exe 192.168.7.7 1234 < D:\dosya.txt
İkinci powershell ile.
Start-Process "D:\Nmap\ncat.exe" -ArgumentList "192.168.7.7 1234" -NoNewWindow -RedirectStandardInput "D:\dosya.txt"
Bir adım öteye gidiyorum; dosyayı gönderen sunucu olsun. Sunucunun linux olması durumundan başlayalım. Linux'ta bash ile bir oluştalım.
while true; do
{ printf 'HTTP/1.1 200 OK\r\nContent-Type: application/octet-stream\r\nContent-Disposition: attachment; filename="dosya.zip"\r\nContent-Length: '; stat -c %s dosya.zip | tr -d '\n'; printf '\r\nConnection: close\r\n\r\n'; cat dosya.zip; } | nc -l -p 8080
done
Bu yapılandırma ile linux sunucu üzerinde mevcut klasörde bulunan dosya.zip'i indirmek isteyen karşı tarafın yapması gereken, web tarayıcısının adres satırına
http://192.168.7.7:8080
gibi bir ifade yazmak. Üstteki bash dosyasında yapılandırmayı 8080 portu üzerinden yaptım. Tarayıcı bağlanır bağlanmaz bir dosya indirecek. Metin verisi olmasına gerek yok, binary dosyalar da aktarılabilir.
Sunucunun Windows olması durumunda işi powershell ile yürütebiliriz.
$file = 'D:\dosya.zip'
$port = 8080
$listener = [System.Net.Sockets.TcpListener]::new(
[System.Net.IPAddress]::Any, $port
)
$listener.Start()
Write-Host "Dosya: $file"
Write-Host "Port: $port"
Write-Host "Durdurmak icin Ctrl+C"
while ($true) {
$client = $listener.AcceptTcpClient()
try {
$stream = $client.GetStream()
$reader = [System.IO.StreamReader]::new(
$stream, [System.Text.Encoding]::ASCII
)
$request = $reader.ReadLine()
while ($reader.ReadLine() -ne '') {}
$name = [System.IO.Path]::GetFileName($file)
$length = (Get-Item -LiteralPath $file).Length
$header = "HTTP/1.1 200 OK`r`n"
$header += "Content-Type: application/octet-stream`r`n"
$header += "Content-Disposition: attachment; filename=`"$name`"`r`n"
$header += "Content-Length: $length`r`n"
$header += "Connection: close`r`n`r`n"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($header)
$stream.Write($bytes, 0, $bytes.Length)
$fs = [System.IO.File]::OpenRead($file)
try {
$fs.CopyTo($stream)
}
finally {
$fs.Dispose()
}
Write-Host "Gonderildi: $request"
}
catch {
Write-Warning $_
}
finally {
$client.Close()
}
}
netcat demiştim, konunun biraz dışına çıktım.
---
https://anto.online/netcat-command-line-cheat-sheet/https://anto.online/nmap-command-line-cheat-sheet/
Hiç yorum yok:
Yorum Gönder