2016-02-19 72 views
0

我有一個Node.js TCP服務器框架,它充當一箇中央TCP服務器,連接到許多傳感器收集和發送數據的TCP客戶端。這本質上是一個機器到機器的通信,TCP客戶端建立連接並開始發送數據。服務器必須認證並處理數據。如何在Node.js TCP服務器框架中識別和驗證不同的TCP客戶端(使用動態IP)?

我想幹什麼? ---> 通過識別每個客戶端並確保它們位於數據庫中的用戶列表中進行身份驗證。

  1. 我可以通過它的IP和端口識別每個入站客戶端。但是,每個客戶端都有一個動態IP。這意味着我不能依靠它來比較我的數據庫中的列表。

  2. 我的目標是確保每個連接都是有效的,並且是我的用戶數據庫的一部分。我正在考慮實現一個'應用層',傳感器(客戶端)和TCP服務器都知道它們匹配的字符串。客戶端建立連接時,會發送此字符串,服務器將使用該字符串與數據庫中的列表進行比較。這樣客戶端每次建立連接時都會發出一個「關鍵字」。

如果這是一個可行的方法,我怎麼能使用Node.js的「NET」模塊發出一個關鍵字只有在建立連接?我沒有看到任何這樣的規定。

此外,有沒有更好的方式來識別M-M連接中的客戶端?任何指針都會有幫助。

+0

使用私鑰/公鑰認證進行安全認證。 – bolav

回答

0

Node-RSA這樣做會爲你做。

否則,

使用socket.write功能,以發送數據。然後,如果另一個Node應用程序正在另一端進行偵聽,則可以使用套接字數據事件來獲取發件人寫入的內容。如果你只想要某些機器連接到你的機器,我確實建議使用一個祕密密鑰,如果他們的IP地址不是靜態的。儘管要注意,這不是完全安全的,因爲人們可以進行暴力攻擊。通過使用一個散列字符串的密鑰,可以最大限度地減少某人猜測密鑰的機會。字符串可以是任何東西,只要你們兩個都有。創建和共享相同的功能會更好一些,這些功能會每隔一段時間改變一次字符串,以提高安全性。 請注意,這不像第一個選項那樣安全,但它肯定還是一些東西。