Generateur de socket

Contenu du snippet

comme c'est écrit dans le titre, cette petite source permet de "generer" un socket
Il suffit d'entrer les differentes informations, puis il est possible de tester le socket pour voir s'il fonctionne, de voir les sources de la pages (pour pouvoir par la suite filtrer les informations utiles)
Enfin, un fichier mrc est generé, permettant la connexion au socket entré
Il ne vous reste plus qu'a completer le sockread a votre convenance pour récuperer les infos qui vous interressent

Bon ce code n'a rien de compliqué, il peut être pratique, surtout pour les débutants en socket, ou peut être même pour les flemards, qui sait ;-)

Source / Exemple :


;SocketGen v1
;fjxokt@gmail.com

dialog socko {
  title "SocketGen v1"
  size -1 -1 174 176
  option dbu
  text "Rentrez la page du site sur lequel vous voulez vous connecter :", 1, 6 4 162 8
  edit "", 2, 6 13 122 11, autohs
  text "Protocole :", 3, 7 29 28 8, right
  combo 4, 37 27 55 30, size drop
  button "Tester", 5, 10 142 28 12
  button "Fermer", 6, 72 161 37 13
  text "Variable :", 7, 10 43 25 8, right
  combo 8, 37 41 55 30, size drop
  list 9, 9 65 155 75, size
  box "Informations ", 10, 3 55 167 103
  button "Générer le code !", 11, 113 142 50 12, multi
  button "Effacer", 12, 41 142 28 12
  text "Port :", 13, 131 15 15 8
  edit "80", 14, 147 13 23 11, limit 5 center
  text "Nom de la var :", 15, 101 43 39 8
  edit "a", 16, 141 41 29 11, center
  button "Sources", 17, 72 142 28 12
}

on *:dialog:socko:*:*:{
  if ($devent == init) { didtok $dname 4 32 HTTP/1.0 HTTP/1.1 | didtok $dname 8 32 &binvar % $+ variable }
  elseif ($devent == sclick) {
    if ($did == 5) {
      if (!$sock(st)) {
        if ((!$did(2)) || (!$did(4)) || (!$did(8)) || (!$did(14)) || (!$did(16))) halt
        sock_b
        set %sock_site $iif(http isin $did(2),$gettok($did(2),2,47),$gettok($v2,1,47))
        set %sock_link / $+ $iif(http isin $did(2),$gettok($did(2),3-,47),$gettok($did(2),2-,47))
        set %sock_port $did(14)
        if ($exists(testsock.html)) .remove testsock.html
        sockclose st | sockopen st %sock_site %sock_port
        if ($did(9).lines) did -a $dname 9 $str(-,30) | did -a $dname 9 $t Connexion a %sock_site en cours...
      }
      else { sock_b | sock_quit | did -a $dname 9 $t Connexion annulée ! }
    }
    elseif ($did == 12) did -r $dname 9
    elseif ($did == 11) {
      if ((!$did(2)) || (!$did(4)) || (!$did(8)) || (!$did(14)) || (!$did(16))) halt
      else sock_generate
    }
    elseif ($did == 6) { dialog -x $dname | sock_quit }
    elseif ($did == 17) sock_win
  }
  elseif ($devent == close) sock_quit
}

on *:sockopen:st:{
  if ($sockerr) { did -a socko 9 $t Connexion impossible | sock_b | halt }
  else did -a socko 9 $t Connexion établie
  if ($did(socko,4) == HTTP/1.1) { sockwrite -n st GET %sock_link HTTP/1.1 | sockwrite -n st Host: %sock_site $+ $str($crlf ,2) | sockwrite -n st User-Agent: Mozilla/5.O }
  else { sockwrite -n st GET %sock_site HTTP/1.0 | sockwrite -n st $crlf }
}

on *:sockread:st:{
  sockread %a
  sockread &a | bwrite testsock.html -1 -1 &a
  if (HTTP isin $g(%a,1) && $g(%a,2-) == 400 Bad Request) { did -a socko 9 $t Erreur de protocole ( Erreur: $v2 ) | sock_err }
  elseif (HTTP isin $g(%a,1) && $g(%a,2-) == 302 Found) { did -a socko 9 $t Document déplacé ou inconnu ( Erreur: $v2 ) | sock_err }
  elseif (HTTP isin $g(%a,1) && $g(%a,2) == 404) { did -a socko 9 $t Page non trouvée ( Erreur: $v2 ) | sock_err }
  elseif (HTTP isin $g(%a,1) && $g(%a,2) isnum 400-505) { did -a socko 9 $t Erreur: $g(%a,2- ) }
  elseif (Réception des données !isin $did(socko,9,$did(socko,9).lines)) did -a socko 9 $t $v1
  unset %a
}

on *:sockclose:st:{ did -a socko 9 $t Données reçues | did -a socko 9 $t Connexion refermée | sock_b }

alias -l sock_generate {
  var %sn $replace($$input(Rentrez le nom que portera le socket :,ioce,Nom du socket),$chr(32),_),%f socket_ $+ [ %sn ] $+ .mrc
  if ($exists(%f)) { if (!$input(Le fichier %f existe déja ! $crlf Voulez vous l'effacer ?,iy,Fichier déja existant)) halt }
  var %o $chr(123),%c $chr(125),%s $chr(124)
  .fopen -o f %f
  .fwrite f ; $+ socket généré par SocketGen $crlf $+ ; $+ pour tester le socket, chargez ce fichier ou copiez le contenu dans un nouveau remote mIRC, puis tapez /socket_ $+ [ %sn ] $crlf $crlf
  .fwrite f alias socket_ $+ [ %sn ] %o sockclose %sn %s sockopen %sn %sock_site %sock_port %c $crlf $crlf
  .fwrite f on *:sockopen: $+ [ %sn ] $+ : %o $crlf if ($ $+ sockerr) %o echo -a Erreur de connexion au socket $ $+ sockname %s halt %c $crlf else %o $crlf sockwrite -n %sn GET %sock_link $did(socko,4) $crlf
  if (1.1 isin $did(4)) var %prot sockwrite -n %sn Host: %sock_site $ $+  + $ $+ str($ $+ crlf ,2)
  else var %prot sockwrite -n %sn $ $+ crlf
  var %v $left($did(socko,8),1),%n $did(socko,16)
  .fwrite f %prot $crlf sockwrite -n %sn User-Agent: Mozilla/5.0 $crlf %c $crlf  $+ %c $crlf $crlf $+ on *:sockread: $+ [ %sn ] $+ : %o $crlf sockread %v $+ %n $crlf $iif(%v == %,echo -a % $+ %n)  $crlf $iif(%v == %,unset,bunset) $v1 $+ %n $crlf $+ %c $crlf $crlf
  .fwrite f on *:sockclose: $+ [ %sn ] $+ : %o echo -a Socket $ $+ sockname refermé %c
  .fclose f
  $iif($input(Génération effectuée ! $crlf Le fichier %f a été crée dans le dossier : $+(",$scriptdir,") $crlf Voulez-vous l'ouvrir ?,iy,Opération terminée),run %f)
}
alias socko dialog $iif($dialog(socko),-v,-m) socko socko
alias -l sock_win { if ($exists(testsock.html)) { window -b @data 150 150 | clear -@ @data | loadbuf @data testsock.html } }
alias -l sock_err { sockclose st | did -a socko 9 $t Déconnexion du socket | sock_b }
alias -l sock_quit { sockclose st | unset %sock_* | if ($exists(testsock.html)) .remove testsock.html | if ($window(@data)) window -c $v1 }
alias -l sock_b { did -ra socko 5 $iif($did(socko,5) == Tester,Stopper,Tester) }
alias -l g return $gettok($1,$2,32)
alias -l t return $+([,$time,])

Conclusion :


Si vous trouvez des bugs ou si vous avez des commentaires/suggestions, n'hesitez pas !
(Je pense que ce code n'est qu'un début...)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.