簡體   English   中英

如何使用netcat發送低吼通知?

[英]How can you send a Growl notification with netcat?

我需要從bash腳本發送咆哮通知,但是我既不能安裝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

但是我不清楚該協議實際上是如何工作的。 我假設當客戶端訂閱另一台計算機時,他們基本上是將自己注冊到計算機列表中,以便服務器連接到服務器(通過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

對於網絡通知,您需要使用密碼,該密碼必須以特定方式添加和散列。 此外,將要發送通知的計算機還必須首先定義了一個或多個通知類型的已發送注冊命令。

要進行密碼加密/散列,您需要執行以下操作:

# 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版Growl中看起來很奇怪,我還沒有在Mac版Mac或Apple的通知中心中查看過。 然后發送消息,類似於:

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"

應用名稱和非名稱必須與注冊中發送的名稱匹配。 優先級必須在-2和2之間。“ Sticky”為對/錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM