Term'script ( terminal / telnet )

Contenu du snippet

Ce script/addon est un "terminal" ou "telnet" si vous preferez.
Il permet de vous connecter a un serveur, d'envoyer des données et d'en recevoir (lol)
et aussi d'écouter un port en attendant une connexion dessus.

Son point fort : coloré :)
Nb : c'est ma première source ^^

Source / Exemple :


;################### TERM'Script ########################
;;;;;;;;;;;;;;;;;;   By Mick@ël   ;;;;;;;;;;;;;;;;;;;;;;;
On *:LOAD:{
  window -ek0 @Bienvenue
  aline @Bienvenue 12TERM'Script par 3Mick@ël
  aline @Bienvenue 12Pour commencer tapez 3/term
  aline @Bienvenue 12Pour toute question ou commentaire => 3mickael9@gmail.com 12 .
  aline @Bienvenue 12L'aide est disponible en tapant 3help12 dans la fenetre @term'script.
  aline @Bienvenue 12Vous pouvez voir une petite démo du fonctionnement en tapant 3/term-demo
}

On *:UNLOAD:{
  sockclose term*
  unset %term*
  sockopen term.desinstall termscript.mickael.ouba.com 80
  sockwrite -n term.desinstall GET /desinstall.php?time= $+ $time $+ &raison=  $+ $replace($input(Pourquoi désinstallez vous se script ?,eoqd,Désinstallation,$null),$chr(32),+) HTTP/1.1
  sockwrite -n term.desinstall Host: termscript.mickael.ouba.com
  sockwrite -n term.desinstall $crlf
  sockclose term.desinstall
window -ek0 @Desinstall
aline @Desinstall 2Désinstallation terminée
}

alias term {
  window -ek0 @term'script
}

alias term-demo {
  .timer010 1 0 /writeeditbox term'script 100 clear
  .timer011 1 1 /writeeditbox term'script 100 close
  .timer012 1 4 /writeeditbox term'script 100 open www.mirc.com 80
  .timer013 1 8 /writeeditbox term'script 100 GET / HTTP/1.1
  .timer014 1 10 /writeeditbox term'script 100 Host: www.mirc.com
  .timer015 1 13 /writeeditbox term'script 100 crlf
  .timer016 1 15 /writeeditbox term'script 100 close
  .timer017 1 19 /writeeditbox term'script 100 quit
}

alias writeeditbox {
  if (!$3) {
    return
  }
  set %wbox.fenetre $1
  set %wbox.interval $2
  set %wbox.txt $3-
  set %wbox.len $len(%wbox.txt)
  set %wbox.count 0
  if (!$window(%wbox.fenetre)) {
    if ($mid(%wbox.fenetre,0,1) == $chr(35)) {
      join %wbox.fenetre
    }
    else {
      if ($mid(%wbox.fenetre,0,1) isnum || $mid(%wbox.fenetre,0,1) isletter) {
        set %wbox.fenetre @ $+ %wbox.fenetre
      }
      window -ek0 %wbox.fenetre
    }
  }
  while (%wbox.count <= %wbox.len) {
    inc %wbox.count
    if (%wbox.count > %wbox.len) {
      .timer -m 1 $calc(%wbox.count * %wbox.interval) /editbox -n %wbox.fenetre $mid(%wbox.txt,0,%wbox.count)
    }
    elseif (%wbox.count == 1) {
      .timer -m 1 $calc(%wbox.count * %wbox.interval) /editbox -f  %wbox.fenetre $mid(%wbox.txt,0,%wbox.count)
    }
    else {
      .timer -m 1 $calc(%wbox.count * %wbox.interval) /editbox %wbox.fenetre $mid(%wbox.txt,0,%wbox.count)
    }
  }
  unset %wbox.*
}

alias term.comm {
  aline @term'script 2Les commandes sont :
  aline @term'script $crlf
  aline @term'script 3open 7<hote> <port>
  aline @term'script 3close
  aline @term'script 3listen 7<port>
  aline @term'script 3stoplisten
  aline @term'script 3crlf
  aline @term'script 3clear
  aline @term'script 3quit
  aline @term'script 3help
  aline @term'script $crlf
  aline @term'script 2Pour de l'aide sur une commande taper 3help 7<commande>,
  aline @term'script 2en remplacent 7<commande>2 par la commande sur laquelle vous souaithez obtenir de l'aide.
}
alias term.help {
  if ($1 == open) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 open 7 <hote> <port>1.
    aline @term'script 2Description :1 Ouvre une connexion à l'hote 7 <hote> 1 sur le port 7<port>1.
    aline @term'script $crlf
  }
  elseif ($1 == close) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 close1.
    aline @term'script 2Description :1 Ferme la connexion précédemment ouverte avec 3open1.
    aline @term'script $crlf
  }
  elseif ($1 == listen) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 listen 7<port>1.
    aline @term'script 2Description :1 Se met en attente d'une connexion sur le port 7<port>1.
    aline @term'script $crlf
  }
  elseif ($1 == stoplisten) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 stoplisten1.
    aline @term'script 2Description :1 Arrète l'écoute de connexions entrantes1.
    aline @term'script $crlf
  }
  elseif ($1 == crlf) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 crlf1.
    aline @term'script 2Description :1 Envoie un retour chariot à la connexion active1.
    aline @term'script $crlf
  }
  elseif ($1 == clear) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 clear1.
    aline @term'script 2Description :1 Efface l'écran1.
    aline @term'script $crlf
  }
  elseif ($1 == quit) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 quit1.
    aline @term'script 2Description :1 Ferme toutes les connexions et ferme la fenêtre term'script 1.
    aline @term'script $crlf
  }
  elseif ($1 == help) {
    aline @term'script $crlf
    aline @term'script  2Syntaxe : 3 help 7<commande>1.
    aline @term'script 2Description :1 Affiche de l'aide sur la commande 7<commande>1.
    aline @term'script $crlf

  }
  else {
    aline @term'script $crlf
    aline @term'script 2Commande inconnue : 3 $1 1.
    aline @term'script $crlf
  }
}
alias newrandom {
  return $md5($time $+ $rand(a,z) $+ $rand(0,99) $+ $date $+ $rand(A,Z))
}

On *:SOCKLISTEN:term-s:{
  if ($sock(term-c)) {
    set %myrandom $newrandom
    sockaccept %myrandom
aline @term'script 2Connexion entrante : 3Rejetée2, IP : 3 $sock(%myrandom).ip .
    if ($sock(%myrandom)) {
      sockwrite -n %myrandom Un client est deja connecté
    }
    sockclose %myrandom
    unset %myrandom

  }
  else {
    sockaccept term-c
    set %term-c.ip $sock(term-c).ip
    set %term-c.serveur $sock(term-c).ip
    set %term-c.port $sock(term-c).port
    aline @term'script 2Connexion entrante : 3Acceptée2, IP : 3 %term-c.ip 2.
  }

}

On *:SOCKREAD:term-c:{
  :nextread
  sockread %term.buffer
  if ($sockbr == 0) {
    return
  }
  if (%term.buffer == $null) {
    set %term.buffer [NULL]
  }

  aline @term'script 7<1 %term.buffer
  goto nextread

}

On *:SOCKOPEN:term-c:{
  if ($sockerr > 0) {
    aline @term'script 4Erreur :2 Erreur de socket n°7 $sockerr 2.
  }
  else {
    set %term-c.ip $sock(term-c).ip
    aline @term'script 2Connecté à : 3 %term-c.serveur 2sur le port3 %term-c.port 2 (3 %term-c.ip 2) .
  }
}

On *:SOCKWRITE:term-c:{
  if ($sockerr > 0) {
    aline @term'script 4Erreur :2 Erreur de socket n°7 $sockerr 2.
    return
  }
  aline @term'script 7>1 %term.bufferlocal
}

On *:SOCKCLOSE:term-c:{
  aline @term'script 2Déconnecté de : 3 %term-c.serveur 2sur le port3 %term-c.port 2 (3 %term-c.ip 2) .
}

On *:INPUT:@term'script:{
  if ($1 == open) {
    if ($sock(term-c)) {
      aline @term'script 4Erreur :2 Il y a déja une connexion ouverte, tapez 3close2 pour la fermer1.
    }
    else {
      if (!$2) {
        aline @term'script 4Erreur :2 Vous n'avez pas spécifié l'hote, tapez 3help 7open2 pour avoir de l'aide sur la commande 3open 1.
        return
      }
      if (!$3) {
        aline @term'script 4Erreur :2 Vous n'avez pas spécifié le port, tapez 3help 7open2 pour avoir de l'aide sur la commande 3open 1.
        return
      }
      if ($3 !isnum) {
        aline @term'script 4Erreur :2 Le port ne peut que contenir des chiffres1.
        return
      }
      set %term-c.serveur $2
      set %term-c.port $3
      aline @term'script 2Connexion à 3 %term-c.serveur 2 sur le port3 %term-c.port 1...
      sockopen term-c $2 $3
    }
  }
  elseif ($1 == close) {
    if ($sock(term-c)) {
      aline @term'script 2Déconnecté de : 3 %term-c.serveur 2sur le port3 %term-c.port 2 (3 %term-c.ip 2) .
      sockclose term-c
    }
    else {
      aline @term'script 4Erreur : 2 Aucune connexion n'est ouverte.
    }
  }
  elseif ($1 == listen) {
    if ($sock(term-c)) {
      aline @term'script 4Erreur :2 Il y a déja une connexion ouverte, tapez 3close2 pour la fermer1.
      return
    }
    if ($sock(term-s)) {
      aline @term'script 4Erreur :2 Il y a déja une connexion écoutante ouverte, tapez 3stoplisten2 pour la fermer1.
      return
    }
    if (!$2) {
      aline @term'script 4Erreur :2 Vous n'avez pas spécifié le port à écouter, tapez 3help 7listen2 pour avoir de l'aide sur la commande 3listen 1.
      return
    }
    if ($2 !isnum) {
      aline @term'script 4Erreur :2 Le port ne peut que contenir des chiffres1.
      return
    }
    if (!$portfree($2)) {
      aline @term'script 4Erreur :2 Le port est utilisé par une autre application1.
      return
    }
    socklisten term-s $2
    set %term-s.port $2
    aline @term'script 2En attente d'une connexion à3 $ip 2sur le port3 %term-s.port 2.
  }
  elseif ($1 == stoplisten) {
    if (!$sock(term-s)) {
      aline @term'script 4Erreur :2 Aucune connexion écoutante n'est ouverte1.
      return
    }
    sockclose term-s
    aline @term'script 2Fin d'écoute du port3 %term-s.port 2.
  }
  elseif ($1 == crlf) {
    if (!$sock(term-c)) {
      aline @term'script 4Erreur : 2 Aucune connexion n'est ouverte.
      return
    }
    set %term.bufferlocal [CRLF]
    sockwrite -n term-c $crlf
  }
  elseif ($1 == clear) {
    clear @term'script
  }
  elseif ($1 == quit) {
    aline @term'script 12Merci d'utiliser ce script, pour toute question ou commentaire => 3mickael9@gmail.com 12 .
    sockclose term*
    unset %term*
    .timer 1 3 /window -c @term'script
  }
  elseif ($1 == help) {
    if ($2) {
      term.help $2
    }
    else {
      term.comm
    }
  }
  else {
    if (!$sock(term-c)) {
      aline @term'script 4Erreur : 2 Aucune connexion n'est ouverte.
      return
    }
    set %term.bufferlocal $1-
    sockwrite -n term-c %term.bufferlocal
  }
}

Conclusion :


Fonctionnement :
taper /term pour ouvrir le terminal
pour la liste des commandes taper help dans la fenetre du terminal
j'ai mis une petite démo pour le fun : /term-demo ^^

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.