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