브라우저를 사용하지 않고 무선 공급자의 "공개"네트워크에 인증하려면 어떻게합니까?


13

이런 종류의 설정은 쇼핑몰과 공항에서 일반적으로 보입니다. 캐나다 서부에서는 Shaw가 이러한 서비스를 제공하고이를 "Shaw Open"이라고합니다. 나는 다른 로케일이 T-Mobile 등과 같은 공급자의 유사한 서비스를 가지고 있다고 확신합니다.

휴대 전화와 같은 것에서는 그렇게 복잡하지 않습니다. Wi-Fi 핫스팟은 공개 액세스를 위해 "열려"있으므로 연결할 필요가 없습니다. 그러나 브라우저를 사용하고 ISP가 제공 한 특정 웹 페이지에 로그인 할 때까지 휴대 전화는 앱을 통해 웹 사이트 나 원격 서비스에 연결되지 않습니다 .

내 질문은 간단히 말하면 : 일반적으로 기존 브라우저가없는 장치에서 인증 단계를 자동화하는 방법은 무엇입니까?

제 경우에는 전시회 등에서 사용하려는 소프트웨어로 구성된 라즈베리 파이가 있습니다.이 위치에는 같은 종류의 "열린"핫스팟이 있습니다. Raspi는 독립적으로 설계되었습니다. 그것은 단지 사업을하고 웹 사이트와 대화합니다. 그러나이 아웃 바운드 연결은 프로세스의 브라우저 부분을 완료하지 않았거나 완료 할 수 없기 때문에 ISP의 "개방"연결에 의해 차단됩니다.

특정 공급자의 네트워크에서이 작업을 수행 할 자격 증명이 있다고 가정하면 Pi의 터미널 세션을 열지 않고도 프로세스의 해당 부분을 어떻게 자동화 할 수 있습니까? 여기서 검색 할 수있는 기술은 무엇입니까?


Pi에 Linux가 있다고 가정하면 wget프로그램이 설치되어 있습니까?
David Wilkins

1
귀하의 질문은 실제로 Linux 또는 Unix에 관한 것이 아니며 Super User 에 더 적합합니다 . 또한 파이에 브라우저를 설치하지 않으려는 이유가 있습니까? links2예를 들어 항상 간단한 텍스트 기반의 명령 줄 브라우저를 사용할 수 있습니다.
terdon

@terdon Pi가 Linux 또는 다른 유닉스 변형을 실행하는 한, 여기서 문제는 완벽하게 주제입니다. 반대로, 나는 Pi가 SU의 정의에 따른 컴퓨터라고 생각하지 않습니다 (그러나 나는 확실하지 않습니다, 나는 그 정의를 이해하지 못했고 그것을 어디에도 적어 놓지 않았습니다).
Gilles 'SO- 악의를 멈춰라'

@Gilles 네, 주제에 관한 것이므로 투표를 마치지 않았습니다. 나는 그것이 SU에 더 잘 맞을 것이라고 제안했다. 그리고 네, 파이 질문은 환영합니다.
terdon

답변:


12

이와 같은 문제를 해결하는 열쇠는 질문하는 방법을 아는 것입니다. Google에서 "panera bread wifi에 액세스하는 방법"을 찾고이 보석을 찾았습니다.

이 기사에는 자동 로그인을 용이하게하는 데 사용할 수있는 몇 가지 스크립트가 있습니다. Python의 Mechanize 라이브러리를 활용하는 Panera Bread의 예를 포함하기로 선택했습니다.

이 솔루션은 특정 네트워크 인터페이스가 작동 또는 중지 될 때마다 NetworkManager의 dispatcher.d디렉토리 를 사용하여 스크립트를 실행합니다. 이 문서는이 디렉토리에 배치 거라고 스크립트를 자세히 설명, /etc/NetworkManager/dispatch.d라고 07-autologin_openwifi. 그 스크립트는 다음과 같습니다.

#!/bin/bash
#------------------------------
# By Fahad Alduraibi
# Last update: June 12, 2012
# Version: 1.1
#------------------------------

export LC_ALL=C
LogFile="/var/log/07-WIFI_ACCESS.log"

# The parameters that get passed to the script are:
# $1 = The interface name ( eth0, wlan0 ...etc)
# $2 = Interface status ( "up" or "down" )

# Check if wireless status is up
# I have two wifi cards in my laptop, named "wlan0 and wlan1"
# so I use regular expression "wlan[01]" to match both of them.
if [[ "$1" =~ wlan[01] && $2 == "up" ]]; then

    # Get the network name from "iwconfig" or (can also locate the network based on IP or MAC address if needed)
    ESSID=$(/sbin/iwconfig $1 | grep ESSID | cut -d'"' -f2)

    # Record the date and time for debugging purposes only
    echo "[`date`] ESSID=($ESSID)" >> $LogFile

    # If the wireless name matches then run its python script
    if [[ "$ESSID" == "BCPL-PUBLIC-WIFI" ]]; then
        /usr/bin/python /myscripts/baltimore-county_library_wifi.py 1>> $LogFile 2>&1
    elif [[ "$ESSID" == "PANERA" ]]; then
        /usr/bin/python /myscripts/panera.py 1>> $LogFile 2>&1
    elif [[ "$ESSID" == "Nordstrom_Wi-Fi" ]]; then
        /usr/bin/python /myscripts/nordstrom.py 1>> $LogFile 2>&1
    #elif .... (you can add more open wifi here)

    fi
fi

#if [[ "$1" =~ wlan[01] && $2 == "down" ]]; then
    ##If you want to do somehting when the network is down
#fi

Panera 빵 스크립트는 panera.py다음 과 같습니다.

#------------------------------
# By Fahad Alduraibi
# Last update: June 12, 2012
# Version: 1.1
#------------------------------
import mechanize
import sys

br = mechanize.Browser()
br.set_handle_equiv(True)
#br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0')]

testURL = 'http://fadvisor.net/blog/'
response = br.open(testURL)

if response.geturl() == testURL:
  print "FAD: You are already logged in to Panera."
  sys.exit()

try:
  forms = mechanize.ParseResponse(response, backwards_compat=False)
except:
  print "FAD: Error in parsing forms, Am I already logged in to Panera?"
  sys.exit()

response.close

form = forms[0]
#print form
#print "----------------------------------- Login"
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- Validate"
#print
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- ConfirmLogin New"
#print
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- ConfirmLogin Validate"
#print
request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- CompleteLogin New"
#print

request = form.click()
response = mechanize.urlopen(request)
forms = mechanize.ParseResponse(response, backwards_compat=False)
response.close()

form = forms[0]
#print form
#print "----------------------------------- HttpLoginRequest"
#print

request = form.click()
response = br.open(request)
#print response.read()

response.close()
print "--- Panera Done ---"

자동 로그인을 수행하는 다른 방법에 관심이 있으시면 전체 기사를 읽어 보시기 바랍니다.이 기사에는 볼티모어 MD 지역을 위해 스크립팅 된 다른 개방형 WiFi 네트워크가 여러 개있었습니다.


불행히도 이것은 유일한 해결책 일 수 있습니다. 불행히도 각 공급자에 대해 제출할 URL과 양식 필드를 결정하기 위해서는 공정한 리버스 엔지니어링이 필요합니다. 그들에게 직접 접근; 내 특정 시나리오에 반드시 가능하지는 않습니다. 그래도 그것이 내가 기대할 수있는 최선의 결과라고 생각합니다. 물론, 웹 인증 양식을 업데이트하기로 결정하자마자 한 공급 업체의 솔루션이 중단 될 수 있습니다.
Octopus

1

인증 구현 방법에 따라 액세스 권한을 얻기 위해 HTTP 요청을 보낼 수 있습니다. 이것은 특정 구현의 여러 측면에 달려 있습니다.

이러한 유형의 인증은 브라우저 만 액세스 할 수 있도록하는 동시에 자율 시스템을 유지하기 위해 사용됩니다. 바로 사용자가 우회하려는 것입니다.

이상적으로는 Wi-Fi 핫스팟으로 설정하고 Pi를 해당 네트워크에 연결하여 원하는 모든 것을 할 수있는 전화가 있어야하지만 무료는 아닙니다.

TL; DR : 거지는 선택자가 될 수 없습니다


1
브라우저를 통해 완료된 경우 반드시 HTTP 사용해야하므로 확실히 가능합니다. 그러나 이러한 종류의 인증 (AFAIK)에는 프로토콜이나 표준이 없으므로 공급자마다 무언가를 구현해야합니다. 구현이없는 곳으로 가져 가려면 쓸모가 없습니다. 나는 전화 핫스팟으로 갈 것 - 그것은 것입니다 당신이 개방형 네트워크에 전화를 연결하는 경우 무료.
goldilocks


1

두 번째 네트워크 장치가있는 경우 NAT 전달을 설정할 수 있습니다. 휴대폰이나 랩톱을 사용하여 "내부"네트워크에 연결하고 RPi가 해당 연결을 네트워크에 크게 전달하도록합니다. 그런 다음 랩톱 또는 휴대폰에서 브라우저로 인증하십시오. 네트워크는 RPi의 외부 MAC 주소를보고이를 인증 된 연결과 연결합니다.

나는 정기적으로 포켓 트래블 라우터 (이전 AirPort Express)를 사용하여 호텔 인터넷에 연결 한 다음, 재 인증 할 필요없이 Chromecast 및 기타 장치를 해당 네트워크에 연결할 수 있습니다.

더 간단합니다. 네트워크 장치가 USB이고 랩톱과 작동하는 경우 랩톱에 연결하고 네트워크에 로그인하십시오. 그런 다음 RPi에 다시 연결하십시오. 몇 시간 동안 작동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.