Linux'ta Bash'te Bir Soketten Veri Nasıl Okunur
Yayınlanan: 2022-06-28Linux komut satırı, bir soketi dinleyerek veya bir sokete bağlanarak verileri almanızı sağlar. Veriler bir metin dosyasında yakalanabilir. Size nasıl olduğunu gösteriyoruz.
Soket İstemciler ve Sunucular
Soketler, ağ bağlantılı yazılımların iletişim kurmasını sağlar. İlk olarak 1983'te Berkeley'deki California Üniversitesi'nde oluşturulan 4.2BSD Unix işletim sisteminde uygulandılar. System V Unix ve Microsoft Windows tarafından hızla benimsendiler.
Soket, bir dosya tanıtıcısı olarak ele alınabilmesi için soyutlanmış bir yazılım ağ bağlantısının uç noktasıdır. Bu, "her şey bir dosyadır" şeklindeki genel Unix ve Linux tasarım ilkesine uyduğu anlamına gelir. Ağ kablonuzu taktığınız duvardaki fiziksel soketi kastetmiyoruz.
Bir program başka bir yazılım parçasındaki bir sokete bağlanırsa, diğer yazılımın istemcisi olarak kabul edilir. Diğer yazılımların bağlantı talep etmesine izin veren yazılıma sunucu denir. Bu terimler, BT dünyasında istemci ve sunucunun diğer kullanımlarından bağımsız olarak kullanılır. Karışıklığı önlemek için bazen belirsizliği ortadan kaldırmak için soket istemcisi ve soket sunucusu olarak adlandırılırlar. Onlara istemciler ve sunucular diyeceğiz.
Soketler, bir uygulama programlama arabirimi (API) olarak uygulanır ve yazılım geliştiricilerin kodlarının içinden soket işlevselliğini çağırmalarına olanak tanır. Bir programcıysanız sorun değil, ama ya değilseniz? Ya da belki öylesiniz, ancak kullanım durumunuz bir uygulama yazmayı garanti etmiyor mu? Linux, ihtiyaçlarınıza göre diğer soket etkin işlemlerden veri almak veya almak için temel soket sunucularını ve soket istemcilerini kullanmanıza izin veren komut satırı araçları sağlar.
İLGİLİ: API Nedir ve Geliştiriciler Bunları Nasıl Kullanır?
İlişkiler Asla Kolay Değildir
Kullanacağımız programlar nc
ve ncat
. Bu iki yardımcı programın garip bir ilişkisi var. nc
programı, ncat
çok daha eski olan nc
yeniden yazılmış halidir. Ama ncat
da yeniden yazıldı ve şimdi nc
yapamayacağı bazı şeyleri yapmamıza izin veriyor. Ve kendisi netcat
adlı bir aracın türevi olan ncat
birçok uygulaması vardır. Bunun da ötesinde, çoğu dağıtımda nc
, ayrı bir program değil, ncat
için sembolik bir bağlantıdır.
Son Arch, Manjaro, Fedora ve Ubuntu dağıtımlarını kontrol ettik. Araçların yüklenmesini gerektiren tek kişi Manjaro'ydu. Manjaro'da nc
almak için netcat
paketini yüklemeniz gerekir, ancak ncat
, netcat
alırsınız. Ve Manjaro'da nc
, netcat
ile sembolik bir bağlantıdır.
sudo pacman -S netcat
Sonuç olarak, Manjaro'da bu makaledeki örneklerde ncat
gördüğünüzde netcat
kullanın.
Sokette Dinleme
Yazılım gelen soket bağlantılarını dinliyorsa, sunucu görevi görüyor demektir. Soket bağlantısı üzerinden gelen herhangi bir verinin sunucu tarafından alındığı söylenir. Bu davranışı nc
kullanarak çok kolay bir şekilde çoğaltabiliriz. Alınan tüm veriler terminal penceresinde görüntülenir.
-l
(dinle) seçeneğini kullanarak nc
bağlantıları dinlemesini söylemeliyiz ve bağlantıları dinleyeceğimiz portu belirtmemiz gerekiyor. Bu nc
örneğine bağlanmaya çalışan tüm istemci programları veya işlemleri aynı bağlantı noktasını kullanmalıdır. -p
(port) seçeneğini kullanarak nc
hangi portu dinleyeceğini söylüyoruz.
Bu komut, nc
bir soket sunucusu olarak başlatır ve 6566 numaralı bağlantı noktasındaki bağlantıyı dinler:
nc -l -p 6566
Gelen bir bağlantı için beklerken, nc
çıktı üretmez. Bir bağlantı yapıldığında, alınan tüm bilgiler terminal penceresinde görüntülenir. Burada, kendisini "istemci 1" olarak tanımlayan bir istemci programı tarafından bir bağlantı yapılmıştır.
nc
tarafından görüntülenen her şey istemciden alınır. Bu istemci, adını ve saat ve tarihi içeren numaralı bir mesaj gönderir.
İstemci bağlantısını kestiğinde, nc
sonlandırılır ve terminal istemine geri dönersiniz.
Dosyaya Veri Gönderme
İstemciden bir dosyadaki verileri yakalamak için, çıktıyı yeniden yönlendirmeyi kullanarak nc
bir dosyaya gönderebiliriz. Bu komut, alınan verileri “logfile.txt” adlı bir dosyaya kaydeder.
nc -l -p 6566 > logfile.txt
Herhangi bir çıktı görmeyeceksiniz—dosyaya giriyor—ve paradoksal olarak, nc
sonlandırılana kadar bir bağlantının olup olmadığını bilemezsiniz. Komut istemine döndürülmesi, bir bağlantının kurulduğunu ve istemci tarafından sonlandırıldığını gösterir.
“logfile.txt” dosyasının içeriğini incelemek için less
kullanabiliriz.
daha az logile.txt
Daha sonra veriler arasında gezinebilir ve less'in yerleşik işlevlerini kullanarak arama yapabilirsiniz.
İLGİLİ: Linux'ta daha az Komut Nasıl Kullanılır
Dosyaya ve Terminal Penceresine Veri Gönderme
Verinin terminal penceresinde kaydığını görmek ve aynı anda bir dosyaya gönderilmesini istiyorsanız, çıktıyı nc
tee
.
nc -l -p 6566 | tee logfile.txt
Çoklu Bağlantıları Kabul Etme
Her şey yolunda, ancak sınırlamaları var. Yalnızca bir bağlantıyı kabul edebiliriz. Tek bir istemciden veri almakla sınırlıyız. Ayrıca, o istemci bağlantıyı kestiğinde, nc
soket sunucumuz da sonlandırılır.
Birden fazla bağlantıyı kabul etmeniz gerekiyorsa, ncat
kullanmamız gerekir. ncat
nc
ile yaptığımız gibi dinlemesini ve belirli bir bağlantı noktasını kullanmasını söylememiz gerekecek. Ama aynı zamanda -k
(canlı tut) seçeneğini de kullanacağız. Bu, ncat
son etkin bağlantı koptuğunda bile istemcilerden gelen bağlantıları çalıştırmaya ve kabul etmeye devam etmesini söyler.
Bu, "Ctrl-C" ile sonlandırmayı seçene kadar ncat
çalışacağı anlamına gelir. ncat
şu anda herhangi bir istemciye bağlı olsa da olmasa da yeni bağlantılar kabul edilecektir.
ncat -k -l -p 6566
ncat
çıktısında görünen farklı istemcilerden gelen verileri, bağlanırken görebiliriz.
Sunucuya Bağlanmak
Ayrıca nc
bir soket istemcisi olarak kullanabilir ve bağlantıları kabul eden ve sunucu görevi gören başka bir programa bağlanabiliriz. Bu senaryoda, nc
soket istemcisidir. Bunu yapmak için nc
sunucu yazılımının ağ üzerinde nerede olduğunu söylememiz gerekiyor.
Bunu yapmanın bir yolu, bir IP adresi ve bir bağlantı noktası numarası sağlamaktır. Sunucu, nc
üzerinde çalıştığımız bilgisayardaysa, 127.0.0.1'lik geri döngü IP adresini kullanabiliriz. Sunucu adresini ve bağlantı noktası numarasını belirtmek için kullanılan hiçbir bayrak olmadığından değil. Biz sadece uygun değerleri sağlıyoruz.
Aynı bilgisayardaki bir sunucuya bağlanmak ve 6566 numaralı bağlantı noktasını kullanmak için geri döngü IP adresini kullanabiliriz. Kullanılacak komut şudur:
nc 127.0.0.1 6566
nc
sunucudan aldığı veriler, terminal penceresinde kaydırılır.
Sunucu yazılımını çalıştıran bilgisayarın ağ adını biliyorsanız, IP adresi yerine bunu kullanabilirsiniz.
nc sulaco 6566
Bağlantıyı kesmek için “Ctrl+C” kullanın.
Çabuk ve kolay
nc
ve ncat
, özel bir soket işleyicisi yazmak istemiyorsanız, ancak soket etkin bir kaynaktan veri toplamanız gerektiğinde tasarıya uyar. Çıktıyı bir dosyaya yeniden yönlendirmek, less
kullanarak çıktıyı gözden geçirmenize ve grep
gibi yardımcı programları kullanarak dosyayı ayrıştırmanıza olanak tanır.
İLGİLİ: Linux'ta grep Komutu Nasıl Kullanılır