Skip to content

Latest commit

 

History

History
67 lines (52 loc) · 2.71 KB

File metadata and controls

67 lines (52 loc) · 2.71 KB

Go Http socket proxy V1.0.1

Ce projet exemple se base sur le code de sparrc. Chaque appel à la commande ping réalise un ping unique, contrairement à celui de sparrc. Il appartient à l'appelant d'encapsuler son ping dans une go routine.

Je l'utilise pour palier à des instabilités de la librairie 'net-ping' pour nodejs (En effet, 'raw-socket' sur lequel se base 'net-ping' s'installe directement dans la boucle principale. Dans certaines circonstances d'utilisation de 'net-ping', la boucle principale de nodejs se plantait lamentablement.).

Il est prévu d'implémenter d'autres requêtes raw socket (UDP, TCP, ...) seulement si j'en ai besoin dans mes projets annexes (donc peut-être un jour :-/ ).

Comment ça marche ?

Lancer la commande 'socketproxy' ou 'socketproxy.exe' comme suit :

./socketproxy [-h localhost] [-p 9797] [-privileged] [-debug]
#	-h to define host instead of 'localhost'
#	-p to define port superior to 1024 instead of '9797'
#	-privileged to activate privileged ping mode
#   -debug to activate debug traces

Si le port 9797 est occupé, le port suivant est utilisé. Ce test de disponibilité s'effectuera 5 fois maximum (du port 9797 au port 9801). Au démarrage, l'application affichera :

2018/12/31 11:26:10 | I | socketproxy | Found free TCP Port 9797
{"freePort" : 9797}

Une application appelante peut alors filtrer pour ce retour pour détecter le numéro de port.

Il est possible de l'embarquer dans un projet node comme suit :

// TODO

socketproxy écoute par défaut sur le port 9797 et fournit le microservice suivant:

ping?timeout=2s&ip=192.168.XXX.XXX

Paramètre Description
timeout Respecter la syntaxe définie ici : https://golang.org/pkg/time/#ParseDuration
ip L'ip vers lequel lancer un ping
DescriptionCode
La valeur de retour : {"result":true,"ip":"216.58.213.131","time":58620926,"timeout":false,"error":""}
Time s'exprime en nanosecondes
La valeur de retour en cas d'erreur : {"result":false,"ip":"xxx.xxx.xxx.xxx","time":0,"timeout":true,"error":"intitulé de l'erreur"}
La valeur de retour en cas d'erreur du mode privilégié : {"result":false,"ip":"xxx.xxx.xxx.xxx","time":0,"Error":"No packet"}

A veiller !

  • Le repo principal n'est pas github. En récupérant les sources, assurez-vous donc de modifier le chemin du package vers pingutils.go dans le fichier cmd/main.go
  • Ce projet dépend d'autres librairies qui ne sont pas publiques. Merci de développer votre propre base de code, notamment pour les logs.