TCP ve UDP bağlantıları oluşturmak ve test etmek için Netcat nasıl kullanılır?

0 Hisse senetleri
0
0
0
0

giriiş

Linux, çoğu dağıtımda çok sayıda gelişmiş ve kullanışlı komut satırı aracına sahip olmasıyla bilinir. Sistem yöneticileri genellikle ek yazılım yüklemeden yerleşik araçları kullanarak birçok görevini gerçekleştirebilirler. Bu kılavuzda, netcat aracının nasıl kullanılacağını ele alacağız. Bu çok yönlü komut, ağ bağlantıları üzerinden veri izlemenize, test etmenize ve göndermenize yardımcı olabilir. Netcat, hemen hemen her modern Linux dağıtımında mevcuttur. Ubuntu, netcat'in BSD sürümüyle birlikte gelir ve bu kılavuzda bunu kullanacağız. Diğer sürümler farklı çalışabilir veya farklı seçenekler sunabilir.

Genel talimat

Netcat varsayılan olarak uzak bir ana bilgisayara TCP bağlantısı kurarak çalışır.

En temel komut şudur:

netcat [options] host port

Bu, belirtilen bağlantı noktası numarası üzerinden tanımlı ana bilgisayara bir TCP bağlantısı başlatmayı dener. Bu, eski Linux telnet komutuna benzer. Bağlantınızın tamamen şifrelenmediğini unutmayın.

TCP bağlantısı başlatmak yerine bir UDP paketi göndermek istiyorsanız -u seçeneğini kullanabilirsiniz:

netcat -u host port

İlk ve son arasına bir tire koyarak bir port aralığı belirtebilirsiniz:

netcat host startport-endport

Bu genellikle bazı ek bayraklarla birlikte kullanılır.

Çoğu sistemde netcat veya nc komutlarını birbirinin yerine kullanabiliriz. Bunlar aynı komutun takma adlarıdır.

Port taraması için Netcat kullanma komutu

Netcat'in en yaygın kullanımlarından biri port tarayıcısıdır. Netcat bu görev için muhtemelen en gelişmiş araç olmasa da (çoğu durumda nmap daha iyi bir seçimdir), açık portları kolayca tespit etmek için basit port taramaları gerçekleştirebilir. Bunu, yukarıda yaptığımız gibi, taranacak port aralığını belirleyerek ve bağlantı başlatmaya çalışmak yerine taramayı gerçekleştirmek için -z seçeneğini kullanarak yapıyoruz.

Örneğin, şu komutu vererek 1000'e kadar tüm portları tarayabiliriz:

netcat -z -v domain.com 1-1000

-z seçeneğiyle birlikte, netcat'e daha detaylı bilgi sağlamasını söylemek için -v seçeneğini de belirttik.

Çıktı şu şekilde olacaktır:

Output
nc: connect to domain.com port 1 (tcp) failed: Connection refused
nc: connect to domain.com port 2 (tcp) failed: Connection refused
nc: connect to domain.com port 3 (tcp) failed: Connection refused
nc: connect to domain.com port 4 (tcp) failed: Connection refused
nc: connect to domain.com port 5 (tcp) failed: Connection refused
nc: connect to domain.com port 6 (tcp) failed: Connection refused
nc: connect to domain.com port 7 (tcp) failed: Connection refused
. . .
Connection to domain.com 22 port [tcp/ssh] succeeded!
. . .

Gördüğünüz gibi, bu birçok bilgi sağlar ve her bağlantı noktası için taramanın başarılı olup olmadığını gösterir. Eğer bir alan adı kullanıyorsanız, kullanmanız gereken form budur.

Ancak, ihtiyacınız olan IP adresini biliyorsanız, taramanız çok daha hızlı olacaktır. Daha sonra, IP adresini DNS kullanarak çözmeniz gerekmediğini belirtmek için -n işaretini kullanabilirsiniz:

netcat -z -n -v 198.51.100.0 1-1000

Dönüş mesajları aslında standart hataya gönderilir (daha fazla bilgi için G/Ç yönlendirme makalemize bakın). Standart hata mesajlarını standart çıkışa gönderebiliriz, bu da sonuçları daha kolay filtrelememizi sağlar.

Standart hatayı bash sözdizimi 2>&1 kullanarak standart çıktıya yönlendiriyoruz. Daha sonra sonuçları grep ile filtreliyoruz:

netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeeded
Output
Connection to 198.51.100.0 22 port [tcp/*] succeeded!

Burada uzak bilgisayarda 1 ile 1000 aralığındaki tek açık portun geleneksel SSH portu olan 22 numaralı port olduğunu görebiliyoruz.

NetCat üzerinden nasıl iletişim kurulur?

Netcat, yalnızca TCP ve UDP paketleri göndermekle sınırlı değildir. Bağlantılar ve paketler için bir port üzerinden de dinleyebilir. Bu, iki netcat örneğini istemci-sunucu ilişkisi içinde bağlamamıza olanak tanır.

Hangi bilgisayarın sunucu, hangisinin istemci olduğu yalnızca ilk yapılandırma sırasında önemli bir ayrımdır. Bağlantı kurulduktan sonra, iletişim her iki yönde de tamamen aynıdır.

Bir makinede, netcat'e belirli bir porttaki bağlantıları dinlemesini söyleyebilirsiniz. Bunu, -l parametresini verip bir port seçerek yapabiliriz:

netcat -l 4444

Bu, Netcat'e 4444 numaralı porttaki TCP bağlantılarını dinlemesini söyler. Normal (root olmayan) bir kullanıcı olarak, güvenlik önlemi olarak 1000'in altındaki portları açamazsınız.

İkinci sunucuda, seçtiğimiz port numarasından ilk makineye bağlanabiliriz. Bunu, daha önce bağlandığımız şekilde yapıyoruz:

netcat domain.com 4444

Hiçbir şey olmamış gibi görünecek. Ancak artık bağlantının her iki tarafına da mesaj gönderebilir ve mesajlarınız her iki tarafta da görünür olacak.

Bir mesaj yazın ve ENTER tuşuna basın. Mesajınız hem yerel hem de uzak ekranlarda görünecektir. Bu işlemin tersi de geçerlidir.

Mesajı göndermeyi bitirdiğinizde TCP bağlantısını kapatmak için CTRL-D'ye basabilirsiniz.

Netcat üzerinden dosya nasıl gönderilir?

Önceki örneği kullanarak daha faydalı şeyler yapabiliriz. Normal bir TCP bağlantısı oluşturduğumuz için, bu bağlantı üzerinden neredeyse her türlü veriyi aktarabiliriz. Bu, yalnızca kullanıcı tarafından yazılan sohbet mesajlarıyla sınırlı değildir. Bu bilgiyi kullanarak netcat'i bir dosya aktarım programına dönüştürebiliriz.

Bağlantıları dinlemek için bir bağlantı uç noktası seçmemiz gerekiyor. Ancak, önceki örnekte yaptığımız gibi bilgileri ekrana yazdırmak yerine, tüm bilgileri doğrudan bir dosyaya koyacağız:

netcat -l 4444 > received_file

> Bu komut tüm netcat çıktısını belirtilen dosya adına yönlendirir.

İkinci bilgisayarda, şunu yazarak basit bir metin dosyası oluşturun:

echo "Hello, this is a file" > original_file

Artık bu dosyayı, dinleme bilgisayarıyla kurduğumuz netcat bağlantısı için girdi olarak kullanabiliriz. Dosya, yazdığımız gibi etkileşimli olarak aktarılacaktır:

netcat domain.com 4444 < original_file

Bağlantıyı bekleyen bilgisayarda, diğer bilgisayarda yazdığımız dosyanın içeriğini içeren receive_file adında yeni bir dosyamız olduğunu görebiliriz:

cat received_file
Output
Hello, this is a file

Gördüğünüz gibi, nesneleri birbirine bağlayarak, bu bağlantıyı her türlü şeyi aktarmak için kolayca kullanabiliriz. Örneğin, isimsiz bir tarball oluşturup, uzak sisteme aktardıktan sonra uzak dizinde paketini açarak bir dizinin tamamını aktarabiliriz.

İndirmenin sonunda, sıkıştırılmış dosyayı açıp şunu yazarak açmamız gereken bir dosya bekleyebiliriz:

netcat -l 4444 | tar xzvf -

Sondaki tire (-), tar'ın netcat'ten bir bağlantı kurulduğunda ağ üzerinden iletilen standart girdi üzerinde çalıştığını gösterir.

Aktarmak istediğimiz dizinin içerikleriyle birlikte bunları bir tarball'a paketleyip netcat aracılığıyla uzak bilgisayara gönderebiliriz:

tar -czf - * | netcat domain.com 4444

Bu sefer, tar komutundaki tire, geçerli dizinin içeriğini (* ile gösterildiği gibi) tar'a alıp sıkıştırmak ve sonucu standart çıktıya yazmak anlamına gelir. Ardından, doğrudan TCP bağlantısı üzerinden yazılır ve karşı uçta alınıp uzak bilgisayarın geçerli dizinine açılır. Bu, bir bilgisayardan diğerine daha karmaşık bir veri aktarımının sadece bir örneğidir. Bir diğer yaygın fikir ise, dd komutunu kullanarak bir diskin bir yüzünün görüntüsünü alıp uzak bir bilgisayara aktarmaktır. Ancak burada buna girmeyeceğiz.

Netcat'i basit bir web sunucusu olarak nasıl kullanırım?

Netcat'i, iletişim kurmak ve dosya aktarmak için bağlantıları dinleyecek şekilde yapılandırdık. Aynı konsepti, netcat'i çok basit bir web sunucusu olarak kullanmak için de kullanabiliriz. Bu, oluşturduğunuz sayfaları test etmek için faydalı olabilir.

Öncelikle sunucuda basit bir HTML dosyası oluşturalım:

nano index.html

Dosyanızda kullanabileceğiniz basit bir HTML kodu şöyledir:

<html>
<head>
<title>Test Page</title>
</head>
<body>
<h1>Level 1 header</h1>
<h2>Subheading</h2>
<p>Normal text here</p>
</body>
</html>

Dosyayı kaydedip kapatın.

Root yetkileri olmadan bu dosyayı varsayılan web portu olan 80 portundan sunamazsınız. Normal kullanıcı olarak 8888 portunu seçebiliriz.

Bu sayfayı yalnızca bir kez sunup nasıl görüntülendiğini kontrol etmek istiyorsanız, aşağıdaki komutu çalıştırabilirsiniz:

printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888

Artık tarayıcınızda şu adresi ziyaret ederek içeriğe erişebilirsiniz:

http://server_IP:8888

Bu, sayfaya hizmet verir ve ardından netcat bağlantısı kapatılır. Sayfayı yeniden yüklemeyi denerseniz, bağlantı kaybolur:


Son komutu sonsuz döngüye sokarak netcat'in sayfayı süresiz olarak işlemesini sağlayabiliriz, şöyle ki:

while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done

Bu, ilk bağlantı kapatıldıktan sonra bile bağlantı kabul etmeye devam etmesini sağlar. Sunucuda CTRL-C tuşlarına basarak döngüyü durdurabiliriz. Bu, bir sayfanın tarayıcıda nasıl görüntüleneceğini görmenizi sağlar, ancak çok daha fazla performans sağlamaz. Bunu gerçek web sitelerini görüntülemek için asla kullanmamalısınız. Hiçbir güvenlik önlemi yoktur ve bağlantılar gibi basit şeyler bile düzgün çalışmaz.

Sonuç

Artık netcat'in ne için kullanılabileceği konusunda iyi bir fikriniz olmalı. TCP/UDP bağlantılarında sorunları teşhis etmek ve temel düzey işlevselliğin düzgün çalıştığını doğrulamak için kullanışlı olabilecek çok yönlü bir araçtır. Netcat kullanarak, farklı bilgisayarlar arasında hızlı etkileşim için kolayca bağlantı kurabilirsiniz. Netcat, bağlantı kurmanın karmaşıklığını ortadan kaldırarak bilgisayarlar arasındaki ağ etkileşimlerini şeffaf hale getirmeye çalışır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Ayrıca Şunları da Beğenebilirsiniz