如何使用球拍或Scheme发送ICMPv6 ping请求?
有https://docs.racket-lang.org/net/index.html,但是它几乎没有关于互联网级别协议的信息。
有https://docs.racket-lang.org/net2/index.html,但似乎未完成或被废弃。
答案 0 :(得分:3)
Racket提供的功能可与Racket支持的所有平台上的 transport 层协议TCP和UDP一起使用(例如* nix,macOS,Windows)。
但据我所知,它不适用于较低的网络层功能,例如ICMP(用于IPv4或IPv6)。
Racket确实提供了FFI,您可以通过该FFI调用适当的特定于OS的功能,以使您可以执行此操作。但是,根据您要完成的工作,使用process
运行类似UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 12: invalid start byte
的命令可能会更简单-然后使用ping
从子流程标准输出通过管道输入Racket输入端口,并解析它以获取您所需的信息。 (如果您对使用read-line
的细节有疑问,则可能需要在此处发布一个单独的好问题。)
更新:您可能只使用process
而不是process
:
system
返回一个字符串,如:
#lang racket/base
(require racket/port
racket/system)
(with-output-to-string
(lambda () (system "ping -c 1 127.0.0.1")))