如何使用 Netcat

如何使用 Netcat

我的服务器上有一个文件,其中包含以空格分散的 HL7 消息。下面的例子。我想在连续循环中一次发送其中一条消息,直到使用 ctrl+c 停止脚本。我很陌生,netcat但是当我尝试直接使用 netcat 时,nc -l 10004我得到:

ncat: bind to :::10004: Address already in use. QUITTING.

设备上已有一个 Mirth 应用程序正在侦听此端口。如果这是唯一的方法,我可以在另一台设备上运行命令,将其完全发送到此设备,但我需要使用发送到 IP 的帮助netcat,并一次发送一条消息,并在它们之间有一个时间间隔。

MSH....
.......
.......

MSH....
.......

MSH....
.......
.......
.......

我从中提取的文件有多条消息,其中不止一行,但它们由换行符分隔。 (空间)

答案1

如果您的 Mirth 应用程序已在端口 10004 上侦听,那么您实际上无法netcat在同一端口上侦听(该-l标志表示)。也许您打算写入端口而不是监听它:

# Connect once and write many messages
( while :; do echo MSH....; sleep 3; done ) | nc -vvv localhost 10004

或者

# Connect for each message
( while :; do echo MSH.... | nc -vvv localhost 10004; sleep 3; done )

请注意,有多种不同的实现netcat。每个实现似乎都处理不同的标志子集......


根据您问题中的新信息,这是另一个可能的解决方案:

MESG=
while IFS= read -r LINE || test -n "$MESG"
do
    if test -n "$LINE"
    then
        # Build the message block
        test -z "$MESG" && MESG="$LINE" || MESG=$(printf "%s\n%s" "$MESG" "$LINE")
        continue
    fi

    # Send the message block to the service
    echo "$MESG" | nc -vvv localhost 10004
    MESG=
    sleep 3
done < /path/to/your/messagefile.txt

相关内容