我们需要从 Internet 唤醒我们内部 LAN 上的一些计算机。
我们有一个有点封闭的路由器,配置它的方法很少。
我想使用 netfilter (iptables) 来执行此操作,因为它不涉及守护进程或类似程序,但其他解决方案也可以。
我的想法是:
为此,一个非常简单的 netfilter 规则是:
iptables --table nat --append PREROUTING --in-interface eth+ --protocol udp --destination-port 1234 --jump DNAT --to-destination 192.168.0.255
唉 netfilter 似乎忽略了转换到广播。192.168.0.255 和 255.255.255.255 什么也没给。还用 192.168.0.0 和 0.0.0.0 进行了测试,
我使用 tcpdump 来查看会发生什么:
tcpdump -n dst port 1234
13:54:28.583556 IP www.xxx.yyy.zzz.43852 > 192.168.0.100.1234: UDP, length 102
仅此而已。我应该有第二行,如:
13:54:28.xxxxxx IP www.xxx.yyy.zzz.43852 > 192.168.0.255.1234: UDP, length 102
如果我重定向到非多播地址,则一切正常。我有 2 条预期的线路。但显然这不适用于 WOL。 …
由于一些热插拔问题,类似于这里讨论的内容,TTY 显示显示连续的消息流(这些消息也记录在 /var/log 目录中)。我键入的每个文本都在视觉上流走,但它确实需要输入(我可以登录并运行命令)。
有没有办法防止此类错误和/或任何其他广播消息泛滥 TTY?
更新:这是请求文件的内容/etc/rsyslog.conf
:
# /etc/rsyslog.conf Configuration file for rsyslog.
#
# For more information see
# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
#
# Default logging rules can be found in /etc/rsyslog.d/50-default.conf
#################
#### MODULES ####
#################
$ModLoad imuxsock # provides support for local system logging
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#$ModLoad immark # provides --MARK-- message capability
# provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# provides TCP …
Run Code Online (Sandbox Code Playgroud) 我编写了一个Qt 应用程序,用于侦听网络接口上的 UDP 广播数据包p2p1
。我已在 VirtualBox VM 中的 Fedora 17 i386 中安装了该应用程序。由于某种原因,应用程序没有收到我发送的任何广播数据包。
我安装并运行 Wireshark 并验证广播数据包确实到达p2p1
:
有谁知道为什么应用程序(正在端口上侦听 UDP 数据包41720
)没有收到任何数据包?一些安全设置什么的?
我对广播消息的行为很好奇
$ sudo wall myfile
Run Code Online (Sandbox Code Playgroud)
来自的消息myfile
出现在所有/dev/ttyN
设备上(我可以通过按Ctrl+ Alt+切换到的设备fN),它也出现在xterm
我打开的窗口上,但没有出现gnome-terminal
(实际上我使用 Linux Mint 和 MATE,所以它mate-terminal
,但它是分叉的gnome-terminal
)。
如果我在tmux
中运行,还有一个有趣的注意事项xterm
:我预计该消息会出现在所有正在运行的终端会话上tmux
(在所有窗口和每个窗口的每个窗格中),但实际上该消息仅出现在当前光标位置该xterm
窗口。
如果我通过调用检查当前控制终端tty
,它会报告 tmux 中不同窗口的不同终端:比如说,我/dev/pts/11
在一个 tmux 窗口和/dev/pts/12
另一个窗口中都有。但是,对于每个xterm
窗口,广播消息只出现一次,而不是在tmux
.
在我看来,该终端仿真器,当分配伪终端,需求一样,“注册”它的地方,使其能够接收广播消息,所以,xterm
这样做,但mate-terminal
并tmux
没有。但这听起来很奇怪,因为伪终端是由内核分配的,因此,它应该在需要的任何地方自动“注册”。
如果有人解释它是如何工作的以及为什么会这样(看起来很奇怪),我会很高兴。
你知道,我就在那里,做我的事情,突然出现了一条可怕的广播消息!
fiatjaf@mises ~> sl
fiatjaf@mises ~> ls dotfiles/
urxvt
vim/
vimrc
fiatjaf@mises ~> cowsay good morning
______________
< good morning >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
fiatjaf@mises ~>
fiatjaf@mises ~>
Broadcast message from root@mises
(/dev/pts/3) at 11:12 ...
The system is going down for maintenance NOW!
Run Code Online (Sandbox Code Playgroud)
如何从我自己的程序中触发这样的消息?
broadcast ×6
terminal ×2
defaults ×1
fedora ×1
hot-plug ×1
iptables ×1
kernel ×1
linux-kernel ×1
networking ×1
shutdown ×1
tty ×1
udp ×1
wake-on-lan ×1