Linux dünyasında, çeşitli veri kaynaklarını birbirine bağlamak için kullanılan birçok araç bulunur. Bu yazıda, esnek ve çok amaçlı bir araç olan socat komutunu inceleyeceğiz. Socat, iki veri kaynağı arasında bağlantı kurarak veri aktarımı sağlayan güçlü bir araçtır. Bu veri kaynakları dosyalar, Unix socket’ler, TCP/UDP protokolleri veya standart input olabilir.
Socat Nedir ve Ne İşe Yarar?
Socat’ın temel amacı, iki veri kaynağı arasında bir köprü oluşturmaktır. Örneğin, bir uygulamayı başka bir sunucuya bağlamak veya veri akışını iki farklı kaynağa yönlendirmek gibi çok çeşitli kullanım alanları vardır. Örneğin, güvenlik nedeniyle dış erişime kapalı bir sunucunuz var ve sadece log dosyalarını başka bir sunucuda görüntülemek istiyorsunuz. Socat, bu senaryoda devreye girerek iki sunucu arasında güvenli bir veri aktarımı sağlar.
Socat Kurulumu
Linux sisteminizde socat’ı kullanabilmek için öncelikle kurulum yapmanız gerekir. Çoğu Linux dağıtımında socat, paket yöneticileri üzerinden kolayca yüklenebilir.
Debian Tabanlı Dağıtımlarda Socat Kurulumu
Debian, Ubuntu gibi dağıtımlarda socat’ı şu komutla kurabilirsiniz:
sudo apt-get install socat
RHEL Tabanlı Dağıtımlarda Socat Kurulumu
Fedora gibi RHEL tabanlı sistemlerde ise aşağıdaki komutu kullanarak socat’ı yükleyebilirsiniz:
sudo yum install socat
Socat Kullanım Örnekleri
Socat’ın nasıl çalıştığını daha iyi anlamak için birkaç örnek üzerinden ilerleyelim.
1. İki Veri Kaynağını Bağlamak
Socat, iki veri kaynağını birbirine bağlamak için kullanılabilir. Örneğin, netcat (nc) ile TCP protokolü kullanarak iki terminal arasında veri alışverişi yapalım.
Adım 1: Dinleyici Modunda Netcat Çalıştırın
İlk terminalde, localhost üzerinde bir port açarak nc komutunu dinleyici modunda çalıştırın:
nc -l localhost 1234
Bu komut, localhost üzerinde 1234 portunu dinlemeye alır.
Adım 2: Socat ile Bağlantı Kurun
İkinci terminalde, socat komutunu kullanarak standart input (STDIO) ile bu porta bağlanın:
socat STDIO TCP4:localhost:1234
Artık iki terminal arasında veri alışverişi yapabilirsiniz. İlk terminalde yazdığınız herhangi bir mesaj, ikinci terminalde görünecek ve tersi de geçerli olacaktır.
2. Veri Yönlendirme
Socat, aynı zamanda veri akışını yönlendirebilir. Örneğin, bir sunucudaki veriyi başka bir sunucuya iletmek için kullanılabilir. İki terminal yerine bu sefer üç terminal kullanarak bir veri yönlendirme örneği yapalım.
Adım 1: İlk Terminalde Netcat Çalıştırın
İlk terminalde yine netcat’i dinleyici modunda çalıştırın:
nc -l localhost 1234
Adım 2: İkinci Terminalde Socat ile Yönlendirme Yapın
İkinci terminalde, 4321 portunu dinleyip bu veriyi ilk terminaldeki 1234 portuna yönlendiren bir socat komutu çalıştırın:
socat TCP4-LISTEN:4321 TCP4:localhost:1234
Adım 3: Üçüncü Terminal ile Bağlantı Kurun
Üçüncü terminalde ise, yeni oluşturduğunuz 4321 portuna bağlanın:
socat STDIO TCP4:localhost:4321
Artık üçüncü terminalde yazdığınız her şey, önce ikinci terminaldeki socat aracılığıyla yönlendirilip, ilk terminaldeki netcat’e iletilecek.
3. Docker ile Socat Kullanımı
Daha pratik bir örnek olarak, Docker içinde çalışan bir Nginx sunucusunu, socat kullanarak bir terminal üzerinden kontrol edelim.
Adım 1: Nginx Docker İmajını Çekin ve Çalıştırın
İlk olarak, Nginx Docker imajını çekin ve çalıştırın:
docker pull nginx
docker run -p 80:80 nginx
Adım 2: Socat ile Bağlantı Kurun
Ardından, socat kullanarak Nginx sunucusuna bir TCP bağlantısı kurun:
socat TCP-LISTEN:1234,reuseaddr,fork TCP:localhost:80
Bu komut, 1234 portunu dinleyip, localhost üzerindeki 80 portuna gelen istekleri yönlendirecektir.
Adım 3: Bağlantıyı Test Edin
Başka bir terminalde, aşağıdaki komutla bağlantı kurarak bir GET isteği gönderin:
socat STDIO TCP4:localhost:1234
GET isteğini gönderdiğinizde, Nginx sunucusundan gelen yanıtı terminalde görebileceksiniz.
Tek Yönlü Veri Aktarımı
Socat varsayılan olarak çift yönlü veri akışını destekler, ancak belirli durumlarda sadece tek yönlü veri akışı sağlamak isteyebilirsiniz. Bunu sağlamak için -u bayrağını kullanabilirsiniz.
socat -u STDIO FILE:test.txt,create
Bu komut, standard input’tan aldığınız veriyi bir dosyaya yazacaktır.
Sonuç
Bu makalede, Linux sistemlerinde yaygın olarak kullanılan socat komutunun temel kullanımını ve birkaç pratik örneğini inceledik. Socat, çift yönlü ve tek yönlü veri akışını sağlayabilen çok yönlü bir araçtır. Özellikle sunucu yönetimi, ağ bağlantıları ve veri yönlendirme senaryolarında işinizi büyük ölçüde kolaylaştırabilir.