所以我根据这个例子创建了一个简单的inetd错误日志服务https://en.wikipedia.org/wiki/Inetd
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
const char *fn = argv[1];
FILE *fp = fopen(fn, "a+");
if (fp == NULL)
exit(EXIT_FAILURE);
char str[4096];
/* inetd passes its information to us in stdin. */
while (fgets(str, sizeof str, stdin)) {
fputs(str, fp);
fflush(fp);
}
fclose(fp);
return 0;
}
我将此行附加到/etc/services/
errorLogger 9999/udp
这条线到/etc/inetd.conf
errorLogger dgram udp wait root /usr/local/bin/errlogd errlogd /tmp/logfile.txt
我现在如何访问这个?我在本地网络中的 Raspberry Pi 上配置了该服务。我需要编写一个访问 UDP 端口 9999 的客户端程序还是可以通过 SSH 来实现?
我已经尝试过了
ssh pi@raspberrypi -p 9999
但它说ssh: connect to host raspberrypi port 9999: Connection refused
我还重新加载了 systemd 服务
sudo service inetd reload
但这没有帮助。
答案1
既然您提到了日志服务,您可以使用以下命令写入它logger
:
logger --udp --port 9999 --server 127.0.0.1 'test msg'
另一个多功能实用程序是socat
:
echo 'test msg' | socat -u - udp-sendto:127.0.0.1:9999
答案2
您已在 UDP 端口 9999 上创建了一个侦听服务。为了写入此内容,您需要使用可以创建 UDP 数据包的工具,但ssh
不是其中之一。
该netcat
工具可以生成UDP数据包,例如我的版本是这样使用的,
echo hello | nc -u -q1 remoteHost 9999 # Some versions of nc still also need "-w1"