簡體   English   中英

確定是否有人用C ++硬連線到路由器

[英]Determine whether someone is hard-wired to router in C++

我們正在嘗試提出一種最佳方法,以檢測用戶是否在Qt中開發的C ++程序中硬連線到其路由器。 如果他們也可以使用WiFi,也可以,但是也需要有硬連線。

這僅需要在Windows上運行,但需要在XP,Vista,7、8和8.1上運行。

我們嘗試了QNetworkConfiguration :: BearerType,它很有希望但似乎沒有給出任何明確的結果。

有沒有人做過或者有關於如何做的想法? 什么是最好的方法? 如果答案涉及QNetworkConfiguration,您如何看待它可能導致某人通過本地連接硬連線?

編輯清晰度我們雇用在家工作的銷售代理商,他們使用軟件電話進行呼叫。 我們要求將它們硬連線到路由器,以提高通話質量。 由於它們是在家工作,因此很難在不進行持續監控的情況下將其插入電源。 他們使用我們可以控制的自定義界面,並希望能夠在激活界面之前進行此檢查,並定期重新檢查以確保它們保持插入狀態。

不,這是不可能的。 一台計算機可能通過一打十二個交換機(或更糟的是,集線器)或一英里的非雙絞線電纜連接在一起,因此您無法通過軟件專門進行檢查。

相反,您可以做的是測量連接的質量(到默認網關和/或某個已知的良好外部主機的ping時間,到相同主機的數據包丟失等)。

如安德魯(+1!)所述,您應該檢查連接的質量,而不是類型/拓撲。 這可能是毫無意義,因為(ⅰ)拓撲結構可以從所使用的承載有很大的差異,和(ii)其它幾個因素會影響的連接,開。

也就是說, QNetworkConfiguration仍然是承載檢查問題的答案,但通過QNetworkConfigurationManager類。 的確,即使此時相應的(有線或未有線)連接不可用, 可以使用有效的QNetworkConfiguration

您應該編寫如下代碼:

QNetworkConfiguration cfg;    
QNetworkConfigurationManager ncm;
auto nc = ncm.allConfigurations(QNetworkConfiguration::Active);   //ACTIVE ONES

for (auto &x : nc)
{
    if (x.bearerType() == QNetworkConfiguration::BearerEthernet)
    {
        cfg = x;
        // other stuff that pleases you
    }
}

請注意,結果在某種程度上會凍結到創建QNetworkConfigurationManager的時間。 要更新列表,在瀏覽之前,可以調用(耗時) updateConfigurations()

最后,通過利用configurationChanged(const QNetworkConfiguration & config)信號,您可以跟蹤LAN連接的狀態更改。

暫無
暫無

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

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