[Ruby] J'ai créé un simple client Ping

Aperçu

J'ai créé un client simple qui envoie et reçoit des requêtes d'écho ICMP une seule fois, donc avant d'oublier, j'ai noté ce que j'avais appris au moment de la mise en œuvre et ce à quoi je faisais attention.

Lien livrable

https://rubygems.org/gems/simple_ping https://github.com/kuredev/simple_ping

Objectif

Quoi / Comment utiliser

Ce que tu peux faire

Choses impossibles

--Destination spécifiée par FQDN --Recommencez

Exemple d'utilisation

ping.rb


require "simple_ping"

ping_client = SimplePing::Client.new(src_ip_addr: "192.168.1.100")
puts ping_client.exec(dest_ip_addr: "192.168.1.101") ? "Success!" : "Failed.."

console


> sudo ruby ping.rb
Success!

Notes de mise en œuvre

mesg, _ = socket.recvfrom(1500)
mesg[21].bytes[0] #=> 0

--Au moment de la réception, il est nécessaire de déterminer si le paquet reçu est le paquet de retour de l'élément transmis, mais de vérifier la correspondance entre l'émission et la réception en rassemblant les «ID», «numéro de séquence» et «type» (ci-dessous). Selon RFC)

Les données contenues dans le message d'écho reçu doivent être renvoyées comme données dans le message de réponse d'écho. L'identifiant et le numéro de séquence sont utilisés par l'expéditeur d'écho pour associer la demande d'écho à sa réponse. L'identifiant peut être utilisé, par exemple le numéro de port utilisé par TCP ou UDP pour identifier la session, ou le numéro de séquence peut être incrémenté à chaque demande d'écho. Le côté retour d'écho renvoie la même valeur dans la réponse d'écho. http://srgia.com/docs/rfc792j.html

référence

J'ai créé plusieurs sockets avec Ruby et j'ai joué avec. --Qiita https://qiita.com/MikuriyaHiroshi/items/b0a40f5e7b7be1ef327c

[Ruby] Programme réseau utilisant RawSocket - Euniclus https://euniclus.com/article/ruby-port-scan/

BasicSocket # send (manuel de référence Ruby 2.7.0) https://docs.ruby-lang.org/ja/latest/method/BasicSocket/i/send.html

Internet Control Message Protocol - Wikipedia https://ja.wikipedia.org/wiki/Internet_Control_Message_Protocol#ICMP%E3%83%98%E3%83%83%E3%83%80

Convertir les codes et caractères ASCII (ord, chr, octets, décompresser, points de code) | Makumaku Ruby Notes https://maku77.github.io/ruby/number/ascii-char.html

RFC792(INTERNET CONTROL MESASAGE PROTOCOL) http://srgia.com/docs/rfc792j.html

Recommended Posts

[Ruby] J'ai créé un simple client Ping
J'ai fait une simple fonction de recommandation.
J'ai fait une mort risquée avec Ruby
J'ai créé une bibliothèque d'extension Ruby en C
J'ai fait un portfolio avec Ruby On Rails
J'ai fait un jeu de problèmes de calcul simple en Java
[Ruby] J'ai fait un robot avec de l'anémone et du nokogiri.
J'ai créé une application de chat.
J'ai créé un serveur et un client Restful au printemps.
J'ai créé un système d'exemple MVC simple à l'aide de Spring Boot
J'ai créé une application shopify @java
J'ai créé une interface graphique avec Swing
Implémenter le client gRPC dans Ruby
J'ai créé une application correspondante (application Android)
J'ai créé un outil de génération package.xml.
[Android] J'ai créé une application de podomètre.
[Rails] J'ai créé une mini-application de calendrier simple avec des spécifications personnalisées.
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.
J'ai essayé un problème de calendrier avec Ruby
J'ai fait diverses fonctions de la séquence de Fibonacci (Ruby)
J'ai créé un plug-in pour IntelliJ IDEA
J'ai créé une application Janken avec kotlin
J'ai créé une application de calculatrice sur Android
J'ai créé un nouvel outil de déploiement Java
J'ai créé une application Janken avec Android
J'ai créé un outil Diff pour les fichiers Java
J'ai créé StringUtils.isBlank
J'ai commencé Ruby
04. J'ai fait un frontal avec SpringBoot + Thymeleaf
J'ai fait de l'art de la mosaïque avec des images Pokemon
java j'ai essayé de casser un simple bloc
J'ai créé un client API THETA qui peut être utilisé pour le développement de plugins
[Ruby] Je veux faire un saut de méthode!
J'ai fait un blackjack avec Ruby (j'ai essayé d'utiliser minitest)
J'ai créé un jeu Janken en Java (CLI)
J'ai créé une application de visualisation qui affiche le PDF
J'ai créé un conteneur Docker pour exécuter Maven
[Rails] J'ai créé une fonction de brouillon en utilisant enum
J'ai créé un client API pour Nature Remo
J'ai créé une bibliothèque de graphiques simple pour les applications de smartphone [MP Android Chart Kai]
J'ai créé un robot LINE avec Rails + heroku
J'ai créé une image Docker pour la version japonaise de SDAPS
J'ai créé un outil de vérification pour le module de version
J'ai créé mon propre outil Instagram automatique [Ruby]
J'ai fait une méthode pour demander la prime vendredi
J'ai fait un chat de dessin "chat de peinture 8 bits" avec WebAssembly
J'ai créé une bibliothèque qui fonctionne comme un onglet dans Safari !!
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
J'ai créé un Wrapper qui appelle KNP depuis Java
J'ai créé un modèle de script ruby qui traite un énorme fichier (même 1 million de lignes) ligne par ligne
J'ai créé une fonction pour enregistrer des images avec l'API dans Spring Framework. Partie 2 (édition client)
J'ai essayé de faire une version japonaise de la transmission automatique du courrier de Rails / devise
Fait le côté serveur du jeu de cartes en ligne ⑤
J'ai créé un environnement de développement avec rails6 + docker + postgreSQL + Materialise.
J'ai fait un interpréteur (compilateur?) Avec environ 80 lignes en Ruby.