linux 内核里的 netconsole 可以将内核的 printk 消息通过 udp 发送到远程主机上,而且还可以将
这样的消息发送到远程主机的syslogd里。
netconsole的用法:
如果 netconsole 被编译成模块,可以用下面的命令启用 netconsole
=============================================================================
2.4内核语法:
modprobe netconsole [dev=srcdev] [source_port=srcport] [target_port=dstport] target_ip=<hex mode of dst ip addr> [\
target_eth_byte0=<dst mac addr hex byte 0> \
target_eth_byte1=<dst mac addr hex byte 1> \
target_eth_byte2=<dst mac addr hex byte 2> \
target_eth_byte3=<dst mac addr hex byte 3> \
target_eth_byte4=<dst mac addr hex byte 4> \
target_eth_byte5=<dst mac addr hex byte 5> ]
srcdev: 网络接口
srcport: udp 源端口 (缺省为6665)
dstport: udp 目标端口 (缺省为6666)
hex mode of dst ip addr: 十六进制表示的目标 ip 地址
dst mac addr hex byte [0-6]: 十六进制表示的目标 mac 地址的第一到六位
#modprobe netconsole dev=eth0 target_port=514 target_ip=0xc0a86b01 \
target_eth_byte0=0x00 \
target_eth_byte1=0x0D \
target_eth_byte3=0x60 \
target_eth_byte4=0x2C \
target_eth_byte0=0x05 \
target_eth_byte0=0xB2
上面这条命令会将本机的 kernel printk msg 发送到主机 192.168.107.1 的 udp 端口 514 (syslogd 缺省监听的端口),
发送给 mac 地址为00:0D:60:2C:05:B2的接口。
=============================================================================
2.6内核语法:
modprobe netconsole netconsole=[srcport]@[srcip]/[srcdev],[dstport]@dstip/[dstmac]
srcport: udp 源端口 (缺省为6665)
srcip: 源ip地址 (缺省为接口地址)
srcdev: 网络接口
dstport: udp 目标端口 (缺省为6666)
dstip: 目标ip地址
dstmac: 目标主机接口的 MAC 地址
#modprobe netconsole netconsole=@/,514@192.168.107.1/00:0D:60:2C:05:B2
上面这条命令会将本机的 kernel printk msg 发送到主机 192.168.107.1 的 udp 端口 514 (syslogd 缺省监听的端口),
发送给 mac 地址为00:0D:60:2C:05:B2的接口。
如果那台主机的 syslogd 配置成为接收远程的 syslog 消息,来自 netconsole 的消息就可以记录在那台主机的系统日志里。
在没有syslogd在运行的主机上可以用命令接收来自远程主机的消息:
# netcat -u -l -p
参见:
1. /usr/src/linux/Documentation/networking/netconsole.txt
2. man 8 syslogd
3. man 1 netcat