Konu: Socker v1.1
Tekil Mesaj gösterimi
  #1  
Alt 18 Haziran 2012, 23:56
Avatar Yok
med1kal med1kal isimli Üye şimdilik offline konumundadır
 Coders 

mS Puan: 31
mS Derece: med1kal Meraklı
 
Üyelik tarihi: 10 Ağustos 2009
Mesajlar: 33
Konular: 5
Eklentiler: 2
Alınan Teşekkür: 1
Yapılan Teşekkür: 0
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Smile Socker v1.1

Uzun zaman önce ilk versiyonunu buradan paylaştığım ve sonradan bir takım eklemeler yaptığım "socker", web sunucusuna header paketi göndermenin ve sonuçlarını görüntülemenin yanı sıra, belirtilen header paketine göre örnek bir socket scripti derlemeye yardımcı oluyor.

Kod:
alias socker {
  if ($1) {
    var %i = 1, %y = 1
    while ($cb(%y)) { if ($istok($cb(%y),Host:,32)) var %x = $gettok($cb(%y),2,32) | inc %y }
    echo -a alias $1 sockopen $1 %x 80
    echo -a on $+(*:sockopen:,$1,:,$chr(123))
    echo -a var $chr(37) $+ -> = sockwrite -n $!sockname
    while (%i <= $cb(0)) {
      if ($regex($cb(%i),Connection:)) { echo -a $(%->,0) Connection: Close | inc %i }
      if (!$regex($cb(%i),Encoding:)) echo -a $(%->,0) $cb(%i)
      inc %i
    }
    echo -a $chr(125)
    echo -a on *:sockread: $+ $1 $+ : $+ $chr(123) 
    echo -a sockread -fn &tmp 
    echo -a $(echo - $bvar(&tmp,1-).text,0) 
    echo -a $chr(125)
    return
  }
  var %i = 1
  while (%i <= $cb(0)) {
    echo - $cb(%i)
    if ($regex($gettok($cb(%i),1,32),Host:)) { 
      if ($sock(%s.name).name) sockclose %s.name
      %s.name = $gettok($cb(%i),2,32) 
      sockopen %s.name %s.name 80 
    }
    inc %i
  }
}
on *:sockopen:$(%s.name):{ 
  var %i = 1, %x = 0
  while (%i <= $cb(0)) {
    if (!$cb(%i)) sockwrite -n $sockname $crlf   
    if ($gettok($cb(%i),1,32) != Accept-Encoding:)  { 
      echo 7 -a *** Uygulanan header: sockwrite -n $sockname $cb(%i) 
      sockwrite -n $sockname $cb(%i) 
    }
    inc %i
  }
  sockwrite -n $sockname $crlf
}

on *:sockread:$(%s.name):sockread -fn &tmp | echo - $bvar(&tmp,1-).text 
on *:sockclose:$(%s.name):unset %s.name


Örnekle aşağıdaki header paketini kopyalıyorum, sonra /socker komutunu kullanarak paketi sunucuya gönderiyor ve gelen cevapları görüntülüyorum.

Örnek header paketi:
Kod:
GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: tr-TR
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Accept-Encoding: gzip, deflate
Host: www.mircscripting.net
Connection: Keep-Alive


Örnek script derleme güncellemesi ise, bu örnek header paketini kopyalayıp /socker MSNet komutunu giriyorum ve belirtilen headera göre derlenmiş script ediniyorum. Komut, aktif pencerede şu sonucu veriyor:

Kod:
alias MSNet sockopen MSNet www.mircscripting.net 80
on *:sockopen:MSNet:{
var %-> = sockwrite -n $sockname
%-> GET / HTTP/1.1
%-> Accept: text/html, application/xhtml+xml, */*
%-> Accept-Language: tr-TR
%-> User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
%-> Host: www.mircscripting.net
%-> Connection: Close
%->
}
on *:sockread:MSNet:{
sockread -fn &tmp
echo - $bvar(&tmp,1-).text
}

Not: Bu arada, $bvar kafa karıştırabilir belki. "Normal %değişken varken ne gerek vardı ona" diye düşündürebilir. Mesele şu ki ajax vs. gibi kaynağa sahip olan web sayfalarındaki verilerin uzunluğu, bazen normal %değişkenin limitinin üstünde olabiliyor ve bilgi eksik görüntüleniyor. Ayrıca bir uyarı da almıyorsunuz ve princin taşını ayıklar gibi saatlerce sorun arıyorsunuz. Neyse ki $bvar'ın barındırabildiği karakter uzunluğu bi hayli fazla. Bazen aktif pencereye yansıtamayacak kadar uzun bir string barındırsa da, en azından kendi içinde saklayabiliyor. "Görüntülenemeyebilirim ama içimde saklıyorum, ayıkla kullan" diyor alet bi bakıma.

Konu med1kal tarafından (19 Haziran 2012 Saat 00:04 ) değiştirilmiştir.
Alıntı ile Cevapla
Sponsored Links
 
1 2 13 14 16 17 18 19 21 22 23 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 49 50 51 52 54 55 56 57 58 59 60 61 62 63 67 68 69 70 71 72 73 74 75 76