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.
https://rubygems.org/gems/simple_ping https://github.com/kuredev/simple_ping
--Destination spécifiée par FQDN --Recommencez
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!
SOCK_RAW
(socket Raw).
--Lorsque vous envoyez enfin les données (send), vous devez spécifier les données sous forme de chaîne de caractères. Il y a. Il est nécessaire de convertir la chaîne de données d'en-tête ICMP préparée en une chaîne de caractères un octet à la fois selon le code ASCII.
--Par exemple, si l '"identifiant" est 65, 65 sera ʻAsur le [code ASCII](http://www3.nit.ac.jp/~tamura/ex2/ascii.html), donc ʻA Vous devez envoyer
.
--Sur Ruby, vous pouvez obtenir des caractères selon le code ASCII en utilisant 65.chr
etc. Référencerecvfrom
, et les données peuvent être obtenues sous forme de chaîne de caractères.
--Les données acquises se présentent sous la forme d'inclusion de l'en-tête IP.bytes
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
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