从socat读取UDP数据而不使用新行
我正在尝试使用socat侦听一些UDP端口,然后将通过UDP传入的数据写入文件 例如,我想在端口53上侦听:从socat读取UDP数据而不使用新行,udp,newline,socat,Udp,Newline,Socat,我正在尝试使用socat侦听一些UDP端口,然后将通过UDP传入的数据写入文件 例如,我想在端口53上侦听: socat UDP-L:53,reuseaddr,pktinfo,fork EXEC:"./dns.sh" 我的dns.sh类似于: while read line; do thedate=`date +"%Y-%m-%d %H:%M:%S"` printf "%s %s %s %s\n" "$thedate" "$SOCAT_PEERADDR" "$SOCAT_PE
socat UDP-L:53,reuseaddr,pktinfo,fork EXEC:"./dns.sh"
我的dns.sh类似于:
while read line; do
thedate=`date +"%Y-%m-%d %H:%M:%S"`
printf "%s %s %s %s\n" "$thedate" "$SOCAT_PEERADDR" "$SOCAT_PEERPORT" "$line" >> dns.txt
done
然而,它没有起作用。根本原因似乎是,输入的UDP数据(dns查询,例如“abc.com”)末尾没有新行字符
有人能帮我吗?当UDP数据末尾没有新行字符时,如何使脚本成功读取它
或者有其他方法可以实现相同的目标(以我要求的相同格式输出数据)
谢谢
======更新1,按照arto的建议尝试了socat-b=======
我试过“socat-b”,但似乎不起作用
我运行命令:
socat -b 15 UDP-L:53,reuseaddr,pktinfo,fork EXEC:"./dns.sh" &
脚本dns.sh为:
root@log-server:~# cat dns.sh
#!/bin/bash
firstdate=`date +"%Y-%m-%d %H:%M:%S"`
printf "%s %s %s %s\n" "$firstdate" "$SOCAT_PEERADDR" "$SOCAT_PEERPORT" "UDP incoming... " >> dns.txt
while read -t 3 line; do
thedate=`date +"%Y-%m-%d %H:%M:%S"`
printf "%s %s %s %s\n" "$thedate" "$SOCAT_PEERADDR" "$SOCAT_PEERPORT" "$line" >> dns.txt
done
但当我尝试ping一个域名>15字节或<15字节时,我只得到:
2013-08-02 21:12:55 192.168.0.142 49899 UDP incoming...
2013-08-02 21:12:59 192.168.0.142 49899 UDP incoming...
2013-08-02 21:13:03 192.168.0.142 49899 UDP incoming...
使用-b选项:
设置数据传输块[大小\u t]。顶多
每个步骤传输字节。默认值为8192字节。谢谢arto。我试图添加-b选项,但似乎没有效果。有关更多详细信息,请参阅我的问题更新。