Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何使用netcat发送咆哮通知?_Bash_Scripting_Growl_Netcat - Fatal编程技术网

Bash 如何使用netcat发送咆哮通知?

Bash 如何使用netcat发送咆哮通知?,bash,scripting,growl,netcat,Bash,Scripting,Growl,Netcat,我需要从bash脚本发送growl通知,但是我没有能力安装growlnotify命令行工具,或者可以执行类似操作的perl模块。我可以编写任意的bash脚本,在快速清点了这个linux机器上的可用内容之后,我似乎有了netcat 我可以用这种方式发送咆哮通知吗?我一直在修补这样的东西: echo -ne "GNTP/1.0 NOTIFY NONE MD5:04cf1ad341ea8e51d7bb314424276c38.6162636465666768\r\nApplication-Name:

我需要从bash脚本发送growl通知,但是我没有能力安装growlnotify命令行工具,或者可以执行类似操作的perl模块。我可以编写任意的bash脚本,在快速清点了这个linux机器上的可用内容之后,我似乎有了netcat

我可以用这种方式发送咆哮通知吗?我一直在修补这样的东西:

echo -ne "GNTP/1.0 NOTIFY NONE MD5:04cf1ad341ea8e51d7bb314424276c38.6162636465666768\r\nApplication-Name: test Notification-Name testtest Notification-Title: blah \r\n\r\n" | nc -v 127.0.0.1 23053
# Hexify the salt:
HEXSALT=`echo -n $SALT | xxd -p`

# Md5 the password+salt
KEYBASIS=`echo -n "$PASSWORD$SALT" | $MD5SUM`
KEYBASIS=${KEYBASIS:0:32}
KEY=`echo -n "$KEYBASIS" | xxd -r -p | $MD5SUM`
KEY=${KEY:0:32}
但我不清楚这个协议到底是如何运作的。我假设当客户端订阅另一台计算机时,他们基本上是将自己注册到服务器要连接的计算机列表(超过23053台),发送格式化消息,可能等待答复,然后断开连接。由于我的bash脚本将包含要发送到的计算机的列表(或者更可能的情况是,接受列表作为参数),因此可以跳过此订阅步骤(除非需要传递神奇的值!)

我认为我没有正确执行哈希,或者我没有将客户端计算机设置为正确接收传入通知

这里少了什么

运行此命令或类似命令时,我返回以下错误消息:

GNTP/1.0 -ERROR NONE
Error-Code: 400
Error-Description: Invalid key hash
Origin-Machine-Name: SOMETHING
Origin-Software-Name: Growl/Win
Origin-Software-Version: 2.0.9.1
Origin-Platform-Name: Microsoft Windows NT 6.1.7601 Service Pack 1
Origin-Platform-Version: 6.1.7601.65536
X-Message-Daemon: Growl/Win
X-Timestamp: 2/5/2013 11:54:28 AM

echo
需要
-e
标志来正确解释转义字符
\r
\n
echo
需要
-e
标志来正确解释转义字符
\r
\n
对于网络通知,您需要使用密码,必须用特定的方式腌制和散列。此外,将发送通知的计算机还必须具有定义了一种或多种通知类型的first Send registration命令

要进行密码盐析/哈希,您可以执行以下操作:

echo -ne "GNTP/1.0 NOTIFY NONE MD5:04cf1ad341ea8e51d7bb314424276c38.6162636465666768\r\nApplication-Name: test Notification-Name testtest Notification-Title: blah \r\n\r\n" | nc -v 127.0.0.1 23053
# Hexify the salt:
HEXSALT=`echo -n $SALT | xxd -p`

# Md5 the password+salt
KEYBASIS=`echo -n "$PASSWORD$SALT" | $MD5SUM`
KEYBASIS=${KEYBASIS:0:32}
KEY=`echo -n "$KEYBASIS" | xxd -r -p | $MD5SUM`
KEY=${KEY:0:32}
注意,salt可以完全任意(并且可以在消息之间进行更改),只要它的大小至少为4个字符。然后,生成注册消息:

# Now we need to build the message string.
MESSAGE="GNTP/1.0 REGISTER NONE MD5:$KEY.$HEXSALT
Application-Name: My Application
Application-Icon: http://somesite.come/whatever.png
Notifications-Count: 2

Notification-Name: startup
Notification-Display-Name: Starting
Notification-Enabled: False

Notification-Name: downtime
Notification-Display-Name: Shutting Down
Notification-Enabled: True

"
MESSAGE=`echo -ne "$MESSAGE" | $UNIX2DOS`
echo "$MESSAGE"
理论上,图标可以在信息中发送,但我从未设法让它工作。图标至少应该是64x64,或者它们在Windows的咆哮中看起来很奇怪,我还没有和Mac的咆哮或者苹果的通知中心联系过。然后发送消息,类似于:

echo "$MESSAGE" | nc -v $ipaddress 23053
尽管您可能完全消除netcat,并使用bash的TCP设施(/dev/TCP)。。。我只是从来没用过,不知道怎么用。最后,要发送通知,请执行以下操作:

MESSAGE="GNTP/1.0 NOTIFY NONE MD5:$KEY.$HEXSALT
Application-Name: $APPLICATION
Notification-Name: $NAME
Notification-Title: $TITLE
Notification-Text: $TEXT
Notification-Sticky: $STICKY
Notification-Priority: $PRIORITY

"
MESSAGE=`echo -ne "$MESSAGE" | $UNIX2DOS`
echo "$MESSAGE"

App name和Not name必须与注册中发送的内容匹配。优先级必须介于-2和2之间。“Sticky”为真/假。

对于网络通知,您需要使用密码,密码必须以特定的方式进行加密和散列。此外,将发送通知的计算机还必须具有定义了一种或多种通知类型的first Send registration命令

要进行密码盐析/哈希,您可以执行以下操作:

echo -ne "GNTP/1.0 NOTIFY NONE MD5:04cf1ad341ea8e51d7bb314424276c38.6162636465666768\r\nApplication-Name: test Notification-Name testtest Notification-Title: blah \r\n\r\n" | nc -v 127.0.0.1 23053
# Hexify the salt:
HEXSALT=`echo -n $SALT | xxd -p`

# Md5 the password+salt
KEYBASIS=`echo -n "$PASSWORD$SALT" | $MD5SUM`
KEYBASIS=${KEYBASIS:0:32}
KEY=`echo -n "$KEYBASIS" | xxd -r -p | $MD5SUM`
KEY=${KEY:0:32}
注意,salt可以完全任意(并且可以在消息之间进行更改),只要它的大小至少为4个字符。然后,生成注册消息:

# Now we need to build the message string.
MESSAGE="GNTP/1.0 REGISTER NONE MD5:$KEY.$HEXSALT
Application-Name: My Application
Application-Icon: http://somesite.come/whatever.png
Notifications-Count: 2

Notification-Name: startup
Notification-Display-Name: Starting
Notification-Enabled: False

Notification-Name: downtime
Notification-Display-Name: Shutting Down
Notification-Enabled: True

"
MESSAGE=`echo -ne "$MESSAGE" | $UNIX2DOS`
echo "$MESSAGE"
理论上,图标可以在信息中发送,但我从未设法让它工作。图标至少应该是64x64,或者它们在Windows的咆哮中看起来很奇怪,我还没有和Mac的咆哮或者苹果的通知中心联系过。然后发送消息,类似于:

echo "$MESSAGE" | nc -v $ipaddress 23053
尽管您可能完全消除netcat,并使用bash的TCP设施(/dev/TCP)。。。我只是从来没用过,不知道怎么用。最后,要发送通知,请执行以下操作:

MESSAGE="GNTP/1.0 NOTIFY NONE MD5:$KEY.$HEXSALT
Application-Name: $APPLICATION
Notification-Name: $NAME
Notification-Title: $TITLE
Notification-Text: $TEXT
Notification-Sticky: $STICKY
Notification-Priority: $PRIORITY

"
MESSAGE=`echo -ne "$MESSAGE" | $UNIX2DOS`
echo "$MESSAGE"

App name和Not name必须与注册中发送的内容匹配。优先级必须介于-2和2之间。“Sticky”是真/假。

为什么没有人用printf来处理这样的事情?为什么没有人用printf来处理这样的事情?