【C#】如何判斷當前是否開啟了遠程桌面連接
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
在C#中用netstat -an | find "3389"查一下有沒有連接是處于ESTABLISHED狀態(tài),本機發(fā)送的則遠程端口是3389,如果有遠程桌面過來則本機端口為3389。
Detecting remote desktop connection
無論如何,在程序中是否可以檢測程序是從遠程桌面會話內(nèi)部運行還是在.NET 2.0中正常運行? 我想做的是,我創(chuàng)建了一個timeclock應用程序,該應用程序?qū)⒁粋€人打入和打入并進行跟蹤。 但是我懷疑這個特定的人正在在家中遠程進入他們的計算機,并進出辦公室。 有什么想法可以解決此問題(并且不能選擇取消遠程桌面訪問)嗎? 我的想法是,如果有一種方法可以檢測到遠程桌面會話,那么我將簡單地將其實現(xiàn)到程序中并防止它們遠程進行計時。 據(jù)稱,
對于遠程桌面會話(或VNC會話)為true 但我會測試以確保;-) 如果您不想為此添加對System.Windows.Forms.dll的引用(如上所述),則還可以直接通過PInvoke調(diào)用基礎系統(tǒng)調(diào)用,如下所示:
可以在PInvoke.net-SystemMetric中找到SystemMetric枚舉(但您可以只使用0x1000的值);在PInvoke.net上獲取GetSystemMetrics的簽名-GetSystemMetrics。 我用RDP和VNC進行了測試-與前者一起使用(也具有admin / console模式),而沒有檢測到后者。 對于Windows應用商店應用程序,您可以使用以下命令:
http://www.appdeploy.com/messageboards/tm.asp?m=21420&mpage=1&key=厬 系統(tǒng)變量%sessionname%如果是本地則返回Console,如果是遠程則返回RDP *。
好吧,幾天前我也遇到過類似的問題。我解決該問題的方法是利用某些遠程桌面應用程序使用已知的默認端口(至少是VNC和/或Microsoft遠程桌面連接)這一事實。因此,我創(chuàng)建了一個方法來告知端口是否正在使用,如下所示:
請記住,將帶庫的using語句放在方法所在文件的開頭。 例如,您只需要傳遞一個參數(shù),例如3389端口(這是遠程桌面連接的默認端口)或5900端口(這是VNC連接的默認端口)。 該方法是使用C#4.0功能創(chuàng)建的,但是可以使用舊版本的C#.Net或Visual Basic完美地實現(xiàn)。 這對我有用,因為我只需要檢查前面提到的兩個應用程序。 希望對您有所幫助。 所有遠程登錄程序都需要在本地計算機上運行的服務或程序。如果允許這些服務或程序在其本地計算機上運行,??則發(fā)問者僅需擔心VNC及其克隆。它們對于使用遠程桌面不是必需的,并且所有操作系統(tǒng)都有遠程桌面客戶端。如果遠程桌面正在運行,則不需要VNC服務器。 此外,除非您以管理員身份在服務器計算機上安裝VNC克隆,否則無法為您登錄。只要您不讓用戶像其他用戶一樣運行流程,唯一要擔心的是您的其他員工之一是否以有問題的員工身份登錄。如果真是這樣,沒有任何技術解決方案將是不夠的。即使您必須為每個員工使用單獨的卡登錄,有問題的員工也可以給他的朋友卡。 對于WPF應用程序,有 如果您擔心VNC,則可以使用
并檢查端口5900是否為" ESTABLISHED"。當然,5900是默認的連接端口,因此它取決于所設置的端口。 從那里,我在CodeGuru上找到了這篇文章,解釋了如何在c#程序中使用
僅需說明一下,如果會話使用的是GPU的RemoteFX虛擬化,則單獨使用GetSystemMetrics(SystemMetric.SM_REMOTESESSION)對于Windows 8 / Server 2012及更高版本已不再可靠。 Microsoft在此處描述了檢測RDS的"官方"方法:檢測遠程桌面服務環(huán)境(最新更新時間為18 May,18)。 它包括使用SystemMetrics調(diào)用和位于以下位置的注冊表檢查
那篇文章中的代碼示例僅是C ++,但是鑒于它只是注冊表查找,我認為人們不會覺得很難用其他語言進行復制。 我希望至少至少有一些.net內(nèi)置函數(shù)在upthread中提到,可以完全遵循此要求,但是:
所以我不樂觀 我將盡快進行一些詳細的檢查并發(fā)布結(jié)果。 該文章在 2021/3/16 0:15:36 編輯過 |
關鍵字查詢
相關文章
正在查詢... |