Skip to content

dnclain/socketproxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages