mIRC Sockets: Web Servisleriyle ve Dış Sunucularla İletişim
İçindekiler
mIRC scripting'in en güçlü ve en az bilinen özelliklerinden biri socket desteğidir. mIRC socket komutları sayesinde scriptleriniz dış dünyayla iletişim kurabilir: Bir web sayfasından veri çekebilir, bir API'ye sorgu gönderebilir, hava durumu bilgisi alabilir, hatta kendi küçük sunucunuzu çalıştırabilir. Bu rehberde socket kullanımının temellerini ve dikkat edilmesi gereken noktaları anlatıyoruz.
Socket Nedir?
Socket, iki bilgisayar arasındaki veri alışverişi kanalıdır. Bir web tarayıcısı bir sayfayı açtığında aslında bir socket bağlantısı kurar, istek gönderir ve cevabı okur. mIRC'in socket komutları, aynı işi script içinden yapmanızı sağlar.
İki tür socket kullanımı vardır: İstemci socket (siz bir sunucuya bağlanırsınız) ve sunucu socket (başkaları size bağlanır). Günlük kullanımda çoğunlukla istemci socket kullanılır.
Temel Komutlar
| Komut | Ne yapar? |
|---|---|
sockopen | Bir sunucuya bağlantı açar |
sockwrite | Bağlantıya veri yazar |
sockread | Bağlantıdan veri okur |
sockclose | Bağlantıyı kapatır |
socklisten | Gelen bağlantıları dinler |
sockaccept | Gelen bağlantıyı kabul eder |
$sock | Socket bilgilerine erişir |
Socket işlemleri olay tabanlıdır: Bağlantı kurulduğunda, veri geldiğinde ve bağlantı kapandığında ilgili olaylar tetiklenir.
Socket Olayları
on *:sockopen:benimsocket: {
if ($sockerr > 0) {
echo -a Baglanti hatasi.
return
}
sockwrite -n $sockname GET /veri.txt HTTP/1.1
sockwrite -n $sockname Host: ornek.com
sockwrite -n $sockname Connection: close
sockwrite -n $sockname
}
on *:sockread:benimsocket: {
var %satir
sockread %satir
if (%satir) { echo -a %satir }
}
on *:sockclose:benimsocket: {
echo -a Baglanti kapandi.
}
Bağlantıyı başlatmak için:
sockopen benimsocket ornek.com 80
Socket adı, bağlantıyı tanımlar ve olaylarda eşleştirme için kullanılır. Birden fazla bağlantıyı aynı anda yönetmek için farklı adlar kullanılır; adın içine bir sıra numarası veya kullanıcı adı katmak yaygın bir tekniktir.
HTTP İsteği Anatomisi
Bir web sunucusuna istek gönderirken HTTP protokolünün kurallarına uymanız gerekir. İstek satırları belirli bir sırayla gönderilir ve son satırdan sonra boş bir satır yazılır; bu boş satır, isteğin bittiğini belirtir. Yukarıdaki örnekteki son sockwrite komutu bu boş satırı gönderir.
Sunucunun cevabı iki bölümden oluşur: Önce başlık satırları, sonra boş bir satır, ardından içerik. Scriptinizin başlıkları atlayıp içeriği işlemesi gerekir. Bunun basit bir yolu, boş satır görene kadar okuduklarınızı yok saymak, boş satırdan sonrasını içerik olarak işlemektir.
TLS Bağlantısı
Modern web servislerinin neredeyse tamamı şifreli bağlantı gerektirir. Güncel mIRC sürümleri, socket komutlarında TLS desteği sunan bir parametre içerir. Bu parametreyle 443 portuna bağlanarak şifreli istekler gönderebilirsiniz. Sürümünüzün yardım dosyasındaki ilgili bölümü kontrol edin; şifreli bağlantı desteği mIRC'in belirli bir sürümünden sonra eklenmiştir.
Veri Okumanın İncelikleri
sockread komutu, varsayılan olarak satır satır okur. Ancak gelen veri satır sonu içermiyorsa veya ikili veri geliyorsa farklı parametreler kullanmanız gerekir.
Önemli bir ayrıntı: Veri parça parça gelir ve her parça için sockread olayı tetiklenir. Bir satırın tamamı tek seferde gelmeyebilir. Bu yüzden bütün cevabı biriktirip sonra işlemek, çoğu durumda satır satır işlemekten daha güvenilirdir. Biriktirme için bir değişken veya hash tablosu kullanılabilir; bkz. mIRC hash tabloları.
Hata Yönetimi
Socket işlemlerinde hata her zaman olasıdır: Sunucu yanıt vermeyebilir, bağlantı kopabilir, DNS çözümlemesi başarısız olabilir, cevap beklenen biçimde gelmeyebilir.
Sağlam bir socket kodu şunları yapar:
- Bağlantı hatasını kontrol eder:
$sockerrdeğerini açılış olayında kontrol etmek zorunludur. - Zaman aşımı koyar: Sunucu yanıt vermezse bağlantıyı belirli süre sonra kapatan bir timer kurar. Timer'lar için mIRC timer yazımıza bakın.
- Socketi her durumda kapatır: İşlem bittiğinde veya hata oluştuğunda bağlantıyı serbest bırakır.
- Cevabı doğrular: Gelen verinin beklenen biçimde olup olmadığını kontrol eder.
- Kullanıcıyı bilgilendirir: Hata durumunda sessiz kalmak yerine açıklayıcı bir mesaj gösterir.
Açık kalan socketleri $sock(*,0) ile kontrol edebilir ve gerektiğinde kapatabilirsiniz. Açık socket biriktirmek, mIRC'in kaynaklarını tüketir.
Güvenlik: En Önemli Bölüm
Socket kullanan scriptler, mIRC scripting'in en riskli alanıdır. Gelen veri, tanımadığınız bir sunucudan geliyor ve içeriğini siz kontrol etmiyorsunuz.
Asla yapmamanız gerekenler:
- Gelen veriyi doğrudan bir komut olarak çalıştırmak.
- Gelen veriyi
$evalveya benzeri değerlendirme fonksiyonlarından geçirmek. - Gelen veriyi doğrulamadan bir kanala göndermek.
- Gelen veriyi dosya adı veya yolu olarak kullanmak.
- Gelen veriyi kontrol etmeden
$readile okunacak bir dosyaya yazmak.
Gelen veriyi kanala göndermeden önce uzunluğunu sınırlamak, kontrol karakterlerini temizlemek ve beklenen biçime uyup uymadığını kontrol etmek gerekir. Bir API'den sayı bekliyorsanız gelen değerin gerçekten sayı olduğunu doğrulayın. Güvenlik konusunda ayrıntılar mIRC script güvenliği yazımızda.
Nezaket ve Kurallar
Socket kullanırken teknik olmayan birkaç sorumluluk da vardır:
- Hizmet kurallarına uyun: Bağlandığınız servisin kullanım koşullarını okuyun. Birçok API, otomatik istekler için kurallar ve sınırlar belirler.
- İstek sıklığını sınırlayın: Bir servise saniyede onlarca istek göndermek, hem kaba hem de IP adresinizin engellenmesine yol açabilir.
- Önbellek kullanın: Aynı veriyi tekrar tekrar istemek yerine bir süre bellekte tutun.
- Kanalda spam yapmayın: Socket'ten gelen bilgileri kanala göndermeden önce kanal kurallarını düşünün.
- Kullanıcı aracı belirtin: Bazı servisler isteklerde kendinizi tanıtmanızı bekler.
Sunucu Socket
socklisten komutuyla mIRC'i küçük bir sunucuya dönüştürebilirsiniz: Başka programlar veya bilgisayarlar size bağlanıp veri gönderebilir. Bu, mIRC'i başka uygulamalarla entegre etmenin bir yoludur.
Ancak sunucu socket ciddi bir güvenlik sorumluluğu getirir: Bilgisayarınızda bir port dinlemeye başlarsınız ve bu porta kim bağlanırsa bağlansın gelen veriyi işlersiniz. Gelen bağlantıları sınırlamak, yalnızca belirli adreslerden kabul etmek ve gelen veriyi titizlikle doğrulamak zorunludur. Gerçekten ihtiyacınız yoksa sunucu socket kullanmaktan kaçının.
Gerçek Bir Senaryo
Bir kanal, kullanıcıların şehir adı yazarak hava durumu öğrenebildiği bir komut istiyor. Scripter bir hava durumu servisinin API'sine socket ile bağlanan bir script yazıyor. İlk sürümde gelen cevabı doğrudan kanala gönderiyor ve bir gün servis beklenmedik bir hata mesajı döndürdüğünde kanala anlamsız uzun bir metin düşüyor. Scripter kodu düzeltiyor: Gelen cevabı doğruluyor, yalnızca beklediği alanları alıyor, çıktıyı tek satıra ve makul bir uzunluğa sınırlıyor, aynı şehir için sonuçları on dakika önbellekte tutuyor ve komuta kullanıcı başına bekleme süresi ekliyor. Script hem güvenli hem de servise saygılı hâle geliyor.
Sonuç
Socket'ler, mIRC'i IRC'nin ötesine taşır: Web servisleri, API'ler ve dış uygulamalarla iletişim kurmanızı sağlar. Olay yapısını öğrenin, HTTP isteğinin kurallarına uyun, hataları ve zaman aşımlarını yönetin, socketleri mutlaka kapatın ve en önemlisi gelen veriyi asla doğrulamadan kullanmayın. Metin eşleştirmenin güçlü aracı için sıradaki rehberimiz mIRC regex.
IRC sorunun mu var? Kanalda birlikte çözelim.
💬 Kanala BağlanSıkça Sorulan Sorular
Socket nedir?
İki bilgisayar arasında veri alışverişi yapmayı sağlayan ağ bağlantısıdır. mIRC socket komutlarıyla kendi bağlantılarınızı kurabilirsiniz.
mIRC ile HTTPS bağlantısı kurulabilir mi?
Güncel mIRC sürümleri socket komutlarında TLS desteği sunar. Sürümünüzün yardım dosyasındaki ilgili parametreyi kontrol edin.
Socket kullanmak güvenli mi?
Dikkatli yazılmış kodla güvenlidir. Gelen veriyi doğrulamadan kullanmak ciddi güvenlik riski oluşturur.


