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 :-/ ).
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:
Paramètre | Description |
---|---|
timeout | Respecter la syntaxe définie ici : https://golang.org/pkg/time/#ParseDuration |
ip | L'ip vers lequel lancer un ping |
Description | Code |
---|---|
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"} |
- 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.