2017-02-23 8 views
-1

デバイスに完全なインターネットアクセスがあるかどうか、つまりユーザーがキャプティブポータル(walled gardenとも呼ばれる)に限定されていないかどうかを確実に検出する必要があります。完全なアクセス権を得るためにフォーム上の資格情報Pythonのキャプティブポータルを正確に検出する

私のアプリは認証プロセスを自動化しているため、ログオンアクティビティを開始する前に完全なインターネットアクセスが利用できないことを知っておくことが重要です。

質問は、ネットワークインターフェイスがアップ状態であり、接続状態であることを確認する方法ではありません。これは、サンドボックス化されたイントラネットセグメントではなく、デバイスに無制限のインターネットアクセスがあることを確認することです。ここで

は、これまでテストするための私のコードです:ユーザーがキャプティブポータル内であれば

def get_connection_status(remote_server = "www.google.com"): 
    for timeout in [1, 5, 10, 15]: 
     try: 
      print "Checking internet connection.." 
      socket.setdefaulttimeout(timeout) 

      # see if we can resolve the host name -- tells us if there is 
      # a DNS listening 
      host = socket.gethostbyname(remote_server) 

      # connect to the host -- tells us if the host is actually 
      # reachable 
      s = socket.create_connection((host, 80), 2) 
      s.close() 

      print 'Internet connected.' 
      return "Connected" 
     except Exception, e: 
      print e 
      print "Internet not connected." 
    return "Not Connected" 

が、これは正確に「未接続」を返すのだろうか?そうでない場合、このメソッドを改善して正確に検出する方法は何ですか?

+0

あなたは、より具体的なものが必要です。ウェブにアクセスする前に、あなたのホストがファーストフードのレストランに座っているかどうかを検出しようとしていますか?あるいは、あなたのホストが、インターネットが巨大なファイアウォールの背後にある中国のような国にいるかどうかを調べようとしていますか? –

+0

明快さに欠けて申し訳ありません。たとえば、ホテルに行ってWi-Fiに接続しているが、完全なインターネットを使用する前に資格情報でサインインする必要があります。そんなこと。あなたのファーストフードの例にもっと近く、私は思う。それは理にかなっていますか? –

答えて

0

次の回答は、Pythonやその他の言語に固有のものではありません。

walled_gardenにある場合、以下の要因がほとんどのキャプティブポータルで標準です。

  1. あなたは、インターネットのウェブサイトを確保する

  2. (暗黙のが、初心者のためにここに追加)アクセス(HTTPS)が許可されていないアクセスすることはできません。唯一の例外は、キャプティブポータル自体と、おそらくキャプティブポータル管理者によって許可された一部のサーバーです。

彼/彼女がwalled_gardenしているのであれば、1はDNS解決が正常に動作している場合は、以下のテスト

  1. チェックを実行することにより確認することができます。私はあなたのコントロール下にあるドメインを使用し、TTLを1〜2分に保って、検索サーバーが常にあなたのDNSに戻るようにすることをお勧めします。 DNSテストに合格すれば、あなたはまだ壁に囲まれた庭にいますが、インターネット接続の可能性は非常に高いです。

  2. DNS解決が機能する場合は、セキュリティで保護されたサイト(HTTP-SSL)にアクセスすることをお勧めします。動作しない場合は、次の手順に進みます。次のステップに素早く移行できるように、タイムアウトを低く設定することを検討する必要があります。

  3. HTTPプロトコルを使用して自分のサーバーにアクセスしてみてください。 walled_gardenにいる場合は、キャプティブポータルページにリダイレクトされます。受信したページヘッダーとサーバー上で構成したページヘッダーを比較すると、walled_gardenの背後にいるかどうかがわかります。

+0

この解決策は私のためにうまくいきました。 'Requests'ライブラリを使用すると、かなり簡単にできました。どうもありがとうございました。 –

関連する問題