2009-05-27 29 views
18

我正在處理一些使用RS232與外圍設備進行通信的傳統系統。我不是很熟悉COM接口。我有一些可以打開和使用COM端口的代碼,但無法打開其他應用程序使用的端口。我需要將數據包黑盒子,以便我們可以使用相同的協議來更新通信。收聽正在使用的串行端口

有沒有辦法讓「中間人」傳入數據包到一個開放的COM端口並檢測哪些數據包正在發送?我正在使用.NET,但我可以接受任何類型的解決方案。

(我發現this在那裏,但我不認爲這會爲我工作。)

+1

我認爲hub4com應用程序(來自com0com)實際上可能會做你所需要的。 – 2009-05-27 14:18:47

回答

13

我用com0com - 這是偉大的設置虛擬COM端口 - 這並不能幫助你所有。

COM端口接口基本上是一個'文件讀取'。當我嘗試連接到已經有另一個實例讀取的COM端口時,我的應用程序會引發異常。我不確定您是否可以嘗試將其打開爲「只讀」而不是讀寫,但值得一試。

您應該可以編寫一個虛擬COM端口,將您的數據分離到日誌文件中。 Com0com是開源的,所以你可以用它作爲一個起點。

另一種可能的解決方案可能是拿起一個rs232 splitter cable將串行信號分叉到另一個串行端口。

或者還有另一種可能性是Serial Sniffer program(或open source sniffer)。

或者嘗試使用來自同一com0com網站的hub4com app

+1

你建議的嗅探器基本上是我已經寫過的。我認爲虛擬化可能是最熱門的方式,但我喜歡分裂線路的想法。我能夠捕獲來自設備的數據包嗎? – Daniel 2009-05-27 14:35:55

+0

你知道在哪裏獲得hub4com的代碼該網站有exe文件,但我看不到代碼。 – baash05 2009-06-17 05:24:06

+0

http://com0com.cvs.sourceforge.net/viewvc/com0com/hub4com/ 了那裏通過: http://sourceforge.net/scm/?type=cvs&group_id=129551 – Kieveli 2009-06-17 14:37:19

4

我一直在走這條路。硬件分離器是最簡單的解決方案。

hub4com安裝程序將涉及「添加新硬件」嚮導。如果你有很多機器,地理上分離的機器或者技術上不熟練並且缺乏必要權限的用戶,安裝可能會很難。

如果這是一個遺留應用程序,它運行在ntvdm?如果是這樣,您可以在DosBox中運行它,除了向串行端口發送/接收數據外,還可以更改DosBox代碼以寫入文件。 DosBox也是跨平臺的。

+0

目前我所知道的是它在Windows上運行。其餘的完全是黑盒子。不幸的是該系統在波蘭,而我不是。我的接觸是合理的計算機識字。如果拆分電纜將使我能夠監聽傳入和傳出的流量,那聽起來就像是要走的路。 – Daniel 2009-05-27 16:29:58

+0

然後,分流器應該走的路。在我的情況下,我放棄了該解決方案,因爲我們有另一個項目,供應商也希望使用分離器,而我不想考慮將其拆分兩次。 – 2009-05-27 16:48:33

10

有什麼辦法,以 「中間人」

是的,有很多。在Windows中通過「過濾器驅動程序」的概念得到了強烈的支持。這樣的驅動程序可以插在獲取I/O請求的驅動程序之前,並查看所有經過的內容。通常意圖改變I/O請求,但也非常適合簡單地監視請求。男人在中間。

這種驅動程序的典型例子是可敬的SysInternals' PortMon utility。向您顯示應用程序從串行端口發送和接收的所有內容,包括配置和數據。有很多這樣的應用程序,只有谷歌的「串口過濾器驅動程序」(在源代碼樣本上很重要)和「串行端口監視器」。

與此有關的一個腳註,您確實傾向於在64位版本的Windows上遇到問題。絕大多數這些應用程序(包括PortMon)僅適用於32位版本。64位版本只允許安裝經過認證的驅動程序,銷售這些應用程序的資金非常少,無法證明費用合理。購物時請注意這一點。

0

您也可以使用TCPcom將數據轉換爲以太網數據包並使用Wireshark進行監控 - 並在其他地方廣播。然後使用TCPcom的另一個實例將其轉發到您喜歡的任何com端口 - 包括一個虛擬com端口。現在你基本上已經通過以太網劫持了數據。 https://sourceforge.net/projects/combytcp/?source=directory