Tarayıcı kullanmadan kablosuz bir sağlayıcının “açık” ağında nasıl kimlik doğrulayabilirim?


13

Bu tür bir kurulum alışveriş merkezlerinde ve havaalanlarında yaygın görünmektedir. Western Canada'da Shaw böyle bir hizmet sunuyor ve ona "Shaw Open" diyor. Diğer yerlerin T-Mobile vb. Sağlayıcılardan benzer hizmetlere sahip olduğundan eminim.

Cep telefonu gibi bir şey yapmak çok karmaşık değil. Halka açık erişim için "açık" olduğu için wifi etkin noktasına bağlanmak için hiçbir kimlik doğrulaması gerekmez. Ancak, tarayıcımı kullanana ve ISS tarafından sağlanan belirli bir web sayfasında oturum açana kadar cep telefonum web sitelerine veya uzak hizmetlere uygulamalar aracılığıyla bağlanmayacak .

Sorumun basitçe belirttiği gibi: Genellikle geleneksel bir tarayıcısı olmayan bir cihazdan kimlik doğrulama adımını nasıl otomatikleştirebilirim?

Benim özel durumumda, ben fuarlarda vb kullanmak istediğiniz yazılım ile yapılandırılmış bir ahududu Pi var. Tezler aynı tür "açık" sıcak noktaları vardır. Raspi'nin kendine yetmesi amaçlanmıştır. Sadece işini yapar ve bir web sitesiyle konuşur. Ancak bu giden bağlantı, ISS'lerin "açık" bağlantısı tarafından engellenir, çünkü işlemin tarayıcı bölümünü henüz tamamlayamadım.

Belirli bir sağlayıcının ağında bunu yapmak için kimlik bilgilerim olduğunu varsayarsak, Pi'ye bir terminal oturumu açmamı gerektirmeden sürecin bu bölümünü nasıl otomatikleştirebilirim? Burada arayabileceğim ne tür bir teknoloji kullanılıyor?


Pi'nizde Linux olduğunu varsayarsak, wgetprogram yüklü mü?
David Wilkins

1
Sorunuz gerçekten Linux veya Unix ile ilgili değil, Süper Kullanıcı için daha uygun olacaktır . Ayrıca, pi'ye bir tarayıcı yüklemek istememenizin herhangi bir nedeni var mı? Her zaman links2örneğin basit bir metin tabanlı, komut satırı tarayıcısı kullanabilirsiniz .
terdon

@terdon Pi Linux veya başka bir Unix varyantı çalıştırdığı sürece, soru burada mükemmel bir konudur. Tersine, Pi'nin SU'nun tanımına göre bir bilgisayar olduğunu düşünmüyorum (ama bundan emin değilim, bu tanımı hiç anlamadım veya hiçbir yere yazılmadığını görmedim).
Gilles 'SO- kötü olmayı bırak'

@Gilles evet, konuyla ilgili, kapatmak için oy vermedim. Sadece SU'ya daha uygun olabileceğini düşündürüyordum. Ve evet, pi soruları orada bekliyoruz.
terdon

Yanıtlar:


12

Bunun gibi problemleri çözmenin anahtarı soruyu nasıl soracağınızı bilmektir. Google "panera ekmeği wifi erişmek için nasıl" aradı ve bu taş ortaya çıktı.

Bu makalede, otomatik oturum açmayı kolaylaştırmak için kullanılabilecek birkaç komut dosyası vardı. Python'un Mechanize kitaplığından yararlanan Panera Bread için örnek eklemeyi tercih ettim.

Çözüm, belirli bir ağ arabirimi yukarı veya aşağı çıktığında komut dosyalarını çalıştırmak için NetworkManager dispatcher.ddizinini kullanır. Makalede, bu dizinde yer olman konusunda senaryoyu ayrıntıları, /etc/NetworkManager/dispatch.ddenilen 07-autologin_openwifi. İşte bu senaryo:

#!/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

Ve işte Panera ekmek senaryosu 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 ---"

Otomatik giriş yapmak için başka yöntemlerle ilgileniyorsanız makalenin tamamını okumanızı tavsiye ederim. Makale, Baltimore, MD alanı için yazılmış başka açık WiFi ağlarına sahipti.


Bu tek çözüm olabilir, ne yazık ki her farklı sağlayıcı için gönderilecek URL'leri ve form alanlarını belirlemek için oldukça ters bir mühendislik gerektirir, ki elbette geliştiricinin mümkün olan tüm sağlayıcıları bilmesi ve sahip olması gereken kendi zorlukları yoktur. bunlara ilk elden erişim; benim özel senaryom için mutlaka mümkün değil. Sanırım bu beklediğimden en iyisi. Tabii ki, herhangi bir sağlayıcının çözümü web kimlik doğrulama formlarını güncellemeye karar verir vermez kırılabilir.
Ahtapot

1

Kimlik doğrulamanın nasıl uygulandığına bağlı olarak, erişim elde etmek için bir HTTP isteği gönderebilirsiniz. Bu, belirli bir uygulamanın birçok yönüne bağlıdır.

Unutmayın, bu tür kimlik doğrulama, otonom sistemleri dışarıda tutmak için yerleştirilirken, yalnızca tarayıcıların erişmesine izin verir, bu da tam olarak atlatmaya çalıştığınız şeydir.

İdeal olarak, bir wifi hotspot olarak ayarlayabileceğiniz ve Pi'nizi bu ağa bağlayabileceğiniz bir telefona sahip olursunuz, böylece istediğinizi yapabilirsiniz, ancak bu ücretsiz değildir.

TL; DR: Dilenciler seçici olamaz


1
Bir tarayıcı üzerinden yapıldığını Eğer gerekir bu kesinlikle mümkün yüzden, HTTP kullanın. Ancak, bu tür bir kimlik doğrulama (AFAIK) için protokol veya standart olmadığından, sağlayıcı başına bir şey uygulamanız gerekir. Uygulamanızın olmadığı bir yere götürmek istiyorsanız bu işe yaramaz. Ben telefon hotspot ile gitmek istiyorum - telefonu açık ağa bağlarsanız ücretsiz olacak .
goldilocks


1

İkinci bir ağ cihazınız varsa NAT iletmeyi ayarlayabilirsiniz. "Dahili" ağınıza cep telefonunuz veya dizüstü bilgisayarınız ile bağlanın ve RPi'nin bu bağlantıyı genel olarak ağa iletmesini sağlayın. Ardından, dizüstü bilgisayarınızdaki veya telefonunuzdaki tarayıcıyla kimlik doğrulaması yapın. Ağ, RPi'nizin harici MAC adresini görür ve kimliği doğrulanmış bağlantıyla ilişkilendirir.

Bunu düzenli olarak otel internetine bağlanmak için bir cep seyahat yönlendiricisi (eski AirPort Express) ile yaparım, sonra Chromecast'imi ve diğer cihazları yeniden doğrulamak zorunda kalmadan bu ağa bağlayabilirim.

Daha da basit ... Ağ aygıtınız usb ise ve bir dizüstü bilgisayarla çalışıyorsa, bir dizüstü bilgisayara bağlayın ve ağa giriş yapın. Ardından RPi'ye yeniden bağlayın. Birkaç saat çalışmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.