------------------------------------------------------------[SiX]-- [0000 0110] La programmation Socket, whats the fuck? by __2 ------------------------------------------------------------------- ______ ___________ ____ ___________ | | | _________ | | | | _________ | |=== | || || |=== | || || |--- | || Client || |--- | o- - - - - - - - -o || Server || |--- | ||_________|| | *o| ||_________|| | | |oo_________| |____| |oo_________| | *o| ______________ _|____|_ |______| \ - - - - - - / \_-_-___-_-__/ Ce mois-ci, initiation a l'internet. Ah serieux? Non, je parle d'un initiation a l'internet en programmation. Vous avez surement deja utiliser MIRC et il est fort probable que vous utilisez ICQ aussi. La question est: Comment c'est fait, comme puis je le faire. Tout est enfin devoiler dans cette enorme document ecrit par moi-meme. Dans ce magazine je vais parler du socket en programmation avec l'utilisation de Visual Basic. La theorie et la tructure reste somme toute assez semblabe dans d'autre languages tel que le GCC/le VC++ ou le DELPHI. LE SOCKET: whats-up? Avant de pouvoir héllucider ce mystere, nous devons avant tout definir se qu'est Internet pour ainsi mieux comprendre: Voici les lois inviolables d'INTERNET: 1 - A chaque fois qu'un nouvel ordinateur se connecte a Internet, un numero lui est dédier. Ce numero se nomme IP (internet protocol) et est composer par 4 chiffres separer par 3 points comme ca: X.X.X.X : Ex: 127.22.33.1 2 - PERSONNE ne peut avoir le meme IP que vous s'il passe par internet. Quand je parle de PERSONNE, je parle d'une personne qui recoit et envoie par le MEME IP. (contraire, voir spoofing) 3 - UN IP est composer de 4 chiffres se situant entre 0 et 255. Donc: 0-255.0-255.0-255.0-255. Alors il est impossible d'avoir comme IP quelque chose comme ca: 500.302.760.1. Si on fait un calcul rapide : 4 294 967 296 d' ordinateurs pouvant etre connecter en meme temps! C'est pas enorme, si on regarde l' expansion du NET. 4 - UN ORDINATEUR(IP) possede des ports d'entrés et sortis, c'est sous le modele d'un port maritime. tu as des quais numerotés et les stocks passent par certain.Y'a 65536 ports possibles par ou l'information sort de votre ordinateur vers le net et vise-versa (l'information viens du net et entre dans l'ordi pour y etre traiter par certains logiciels) 5 - Certains ports ne servent specifiquements qu'a certaines choses voici la description des plus populaire. 21 : FTP : File Transfert Protocol , serveur de download/upload 22 : SSH : Secure Shell , pour les gros serveurs seulement, il s'agit d'un systeme securitaire pour entrer dans le serveur en tant qu'usager speciaux (admin genre) 23 : TELNET : Port tres standart, il s'agit du port utiliser pour Wingater ou entrer dans un SHELL CLASSIQUE. 79 : FINGERD: utiliser par les serveurs (unix) il vous permet a distance de voir qui est sur le reseau interne de la machine. 80 : HTTP : Port utiliser pour les pages Web. 139 : NETBIOS: Port par ou on se fait nuker :-) (so...) 6667 : IRC : Par ou on entre pour allez sur IRC (standart) Donc par exemple, quand vous allez sur www.yahoo.com votre ordinateur fait un action comme celle la: -> Je pars du port 2001 metons et je me connecte au port 80 de www.yahoo.com ou encore quand vous allez sur IRC(us.undernet.org): -> Je pars du port 330 metons et je me connecte au port 6667 de us.undernet.rog 6- Le cheminement reussi des 2 exemples est appeler une connection. Un gateway, une route quoi! Et les deux ports qui sont utiliser sont deux SOCKETS. Deux prises. une qui souvre pour aller se connecter et l'autre qui est en attente de connection. Donc on peut resumer une connection a IRC par ceci: MON ORDINATEUR ouvre socket sur port 1024 qui lui va se connecter sur le socket du port 6667 qui etait en attente de connection. Si vous avez rien compris, reliser et allez me parler sur undernet ou en email ou encore informez-vous, car sans la base vous allez rien comprendre, je vous l'assure. Vous ne devez pas que copier se que je dis mais surtout comprendre! Maintenant la programmation, comment , pkoi . howto: On va faire un bo petit client IRC! quand tout va etre terminer vous allez avoir un minimum :-) Ici je vous disait que je l'expliquais en Visual Basic alors vous aurez besoin de ceci: www.socket-wrench.com <- allez faire venir le socketwrench qui est freeware pour VB 3(16 bits) ou celui pour le 4,5,6 (32 bits) mais ne faite pas venir leurs motadis sockettools. Apres vous installer le fichier qui sapellera : sw220w32.exe pour le VB 4,5,6 (32 bits). Avant de passer au Visual Basic vous devez connaitre le protocole IRC, et oui encore autre chose. Rassurez-vous c'est tres enfantin. Nous allons immiter une connection sur IRC comme avec MIRC mais en passant par telnet. Telnet est un programme tres pratique. Il sagit dun SOCKET dynamique, est a dire quavec vous pouvez vous connectez a nimporte quel IP et PORT connus. Telnet ou ca? Dans votre Windows95, vous en avez un en cadeau. Ouvrez Telnet.exe, il faut le configurer pour le rendre plus facile a utiliser donc allez dans son menu: Terminal /preferences: cochez ECHO LOCALE. Bon maintenant immitons la connection IRC avec Telnet. Vous allez dans le menu CONNEXION et clicker sur SYSTEME DISTANT: - Dans Nom de l'hote(IP): tapez Us.undernet.org (le serveur centrale de Undernet) - Dans le port : tapez 6667 (voir plus haut) - L'emulation VT-100, vous n'y touchez pas. Et apres vous vous connectez en appuyant sur le bouton CONNECTER. Apres quelques secondes vous devriez voir un curseur noir sur blanc clignoter sans rien dire. CRACK nous voila dans le protocole IRC (ET OUI VOUS ETES CONNECTER!) IRC a besoin de quelques informations pour vous laissez passer. Voila donc etape par etape, se que vous devez faire. Tapez: USER abc def jpg klm + ENTER abc est votre ident@email et jpg klm sont respectivement votre prenom et nom de famille Si tout se passe bien, rien n'apparait donc vous continuez en choisissant un NICK en tapant : NICK Bonzo01 + ENTER (bonzo01 est un exemple que vous pouvez modifier) Si encore la tout fonctionne, vous devriez voir une phrase qui ressemble a ca. PING :123456789012 C'est un PING que le serveur vous envoie pour voir si vous allez reagir. Quel est la commande pour REAGIR justement? Logique! PONG!. Donc vous tapez PONG 123456789012 <- les chiffres dois etre les meme que dans le PING. Si ca fonctionne, vous allez entrer sur IRC avec le beau MOTD (message of the day) en entrant. La vous devez connaitre les commandes de base. JOIN #CANAL --> equivalent de /JOIN #CANAL PART #CANAL --> equivalent de /PART #CANAL QUIT :msg --> equivalent de /QUIT msg (les : sont important) NICK tonnick--> equivalent de /NICK tonnick PRIVMSG :msg--> equivalent de /MSG. le PRIVMSG peut s'interpreter de 2 facons: PRIVMSG #sector_X :Gang de morons! ce qui donne /MSG #SECTOR_X GANG DE MORONS en Mirc ou encore, PRIVMSG __2 :Wow ca marche! qui est lequivalent de /MSG __2 Wow ca marche! en Mirc. Saisis? Non? Poser en des questions. chu la pour ca. Pas la, dans le magazine mais par email ou sur undernet. ***Maintenant que vous connaisez la base du protocole, passons au Visual Basic. Jespere que vous saisisser un rudiment de Visual basic, ce n'est pas necessaire mais ca aide beaucoup. Donc la premiere chose est de creer un nouveau programme (voir form). Placer y un gros TextBox qui servira d'ecran pour voir sur IRC. un bouton qui s'apellera CONNECT. Et un autre petite boite (textbox)dans lequel vous taperez se que vous voulez envoyez. Maintenant il est temps d'ajouter un element SOCKET (se que vous avez downloader) qui va vous permette de faire du INTERNET avec votre Visual Basic. ******Notez bien que j'ai fait XPIXX et W/X-Lockpick avec VB3 et Socket-Wrench. Ajouter les components suivant: - Cswskctl.vbx qui se situe dans C:\WINDOWS\SYSTEM - Cswsock.bas qui se situe dans C:\Cstools\Samples\VB3 ou VB4, 5,6 Vous verrez alors un nouvel iconne apparaitre dans votre boite de controle, il sagit dune boite qui ressemble a une prise de courant. Clicker dessus et droper en un dans votre FORM. Vous venez de creer votre premier socket qui par la suite sera votre moyen de transport vers IRC!. Il s'apelle par defaut Socket1. Maintenant double-clicker sur votre FORM et vous tomberez dans ceci: SUB Form_load; ' se qui veut dire, l'evenement de se qui charge quand il s'execute. Vous devez definir votre nouveau Socket (quel type par exemple) Tapez vos informations et le produit finale devrait ressembler a cela: ---------------------------------------------------------------------- SUB Form_load() Socket1.AddressFamily = AF_INET ' Definir le type (internet, intranet)..etc Socket1.Protocol = IPPROTO_TCP ' Definir le vehicule (TCP est la base) Socket1.SocketType = SOCK_STREAM ' Ca cest par defaut. Voir plus loint. Socket1.LocalPort = IPPORT_ANY ' le port de sortie a prendre de votre machine, la il est au hasard Socket1.RemotePort = 6667 ' le port de la machine distante (serveur UNDERNET) Socket1.Binary = True ' Information en binaire? Pas tres important mais bon. Socket1.BufferSize = 1024 ' la grosseur des packets dinformation qui circule ( a coup de 1024 bytes ) Socket1.hostname = "us.undernet.org" ' le IP ou DNS du destinataire (serveur UNDERNET) End Sub ---------------------------------------------------------------------- Et voila, vous venez de configurer votre premier socket et croyez-moi tout est en regle. Maintenant allez parametrer votre bouton CONNECT en double-clickant dessus et ajoutez a l'interieur la ligne suivante: SOCKET1.ACTION = SOCKET_CONNECT 'Action de se connecter, en tout cas d'essayer! Cela veut dire que quand vous cliquerez sur le bouton CONNECT, votre ordinateur emtamera un essaie de votre socket au destinaire (us.undernet.org) port 6667. Si cela ne fonctionne pas il vous retourne un erreur, dans le cas contraire, c'est a vous de traiter se qui va suivre. Que faire lorsque la connection a reussi? Simple, clicker sur votre iconne SOCKET que vous aviez ajouter tantot et allez dans l'evenement SOCKET_CONNECT et tapez cela a l'interieur: msgbox "CONNECTER!" ' vous envoie le msg a lecran ' Maintenant ajouter le USER et le NICK de tout a leurs dans TELNET dim user_id as string ' declaration de variable temporaire dim nick_id as string ' declaration de variable temporaire user.id = "USER abc def jp klm"+chr(13)+chr(10) ' le Chr(13) et (Chr(10) est lequivalent d'un ENTER en programmation et il compte pour 2 caracteres ' le reste prend 19 caracteres de long et cest pour cela que jai mis 21 en totale. socket1.write user_id, len(user_id) ' On vient denvoyer la donnee, c'est rapide non? Maintenant envoyons le nick du meme coup. nick_id = "NICK Boumbo_"+chr(13)+chr(10) 'encore la, le 13+10 est un ENTER et compte pour 2 caracteres...ainsi va la vie. socket1.write = nick_id, len(nick_id) ----------- Ici on ne le vois pas, mais si tout fonctionne, le serveur renvoie son PING :123456789012 et attent un PONG. Nous devons donc filtrer se que notre SOCKET recois et tout dependant du type de donnee, renvoyer un information pertinente. Voila donc comment: levenement suivant consiste a "QUAND JE RECOIS DE LINFO" Dans votre evenement (event) Socket1.read ajouter ceci : Sub Socket1.read ...datalength...isurgent dim sbuffer ' le buffer cest une string qui va contenir se quon recoit dim nread as integer ' nombre de caracteres lus dim x as integer ' variable numerique temporaire dim pong as string ' variable pong en format string nread = socket1.read(sbuffer,datalength) ' et voila votre sbuffer contient se que vous recvez, comme un PING :123456789012 ' par exemple x = instr(sbuffer,"PING :") 'instr cherche le "PING :" dans la string Sbuffer et 'retourne la position dans X, genre le 31 caracteres ;] if x > 0 then 'boucle pour SI "PING :" il y a pong = mid$(sbuffer,x+6,len(sbuffer)) 'place dans PONG le contenu du sbuffer 'en partant du x-eme caractere jusqua la fin pong = "PONG "+pong+chr(13)+chr(10) 'ne jamais oublier le ENTER a fin(13,10) socket1.write pong,len(pong) 'et voila vous venez de finir votre ping?PONG! end if 'ici placer quelque chose du genre :tout se que je recois envoie le dans une boite visible text1.text = text1.text + sbuffer + chr(13)+chr(10) text1.selstart = len(text1.text) ' ces 2 lignes font en sorte quon voit tout se qui passe dans la boite Text1 ' mettez les options Scrollbar a ON et MultiLine par exemple. end sub Derniere chose a faire pour faire quelque chose de plus consistent. C'est que tout ske vous tapez dans la text2.textbox soit envoyer a IRC: Simple, prenez le event keypress et foutez ca a linterieur du sub if keyascii = 13 then socket1.sendlen = len(text2.text) socket1.senddata = text2.text text2.text = "" end if Vous avez maintenant un IRC client qui a toute les chances de fonctionner si vous avez suivi les exemples, en cas contraire.. ecrivez-moi ou encore si vous etes bone en anglais, allez lire le user reference qui vous montre comment faire un projet similaire pas a pas. Vous pouvez aussi charger les exemples qui se trouve dans votre \cstools\sample pour vous aidez a bien comprendre. Certain dirons que je n'ai parler que des sockets en format event et cest vrai. Cest plus facile pour commencer.Dans les temps a venir je vous parlerais du Socket en format procedurale (le bon vieux temps) Sur ca , amusez-vous a decouvrir, je lespere un nouveau monde. __2.the_ironcurtain