ฉันจะรับรองความถูกต้องกับเครือข่าย "เปิด" ของผู้ให้บริการไร้สายโดยไม่ต้องใช้เบราว์เซอร์ได้อย่างไร


13

การตั้งค่าประเภทนี้ดูเหมือนจะเป็นเรื่องปกติในห้างสรรพสินค้าและสนามบิน ใน Western Canada Shaw ให้บริการดังกล่าวและเรียกมันว่า "Shaw Open" ฉันค่อนข้างมั่นใจว่าสถานที่อื่น ๆ มีบริการที่คล้ายกันจากผู้ให้บริการเช่น T-Mobile เป็นต้น

จากบางอย่างเช่นโทรศัพท์มือถือมันไม่ซับซ้อนเลยที่จะทำ ไม่จำเป็นต้องมีการตรวจสอบสิทธิ์เพื่อเชื่อมต่อกับ wifi hotspot เนื่องจากเป็น "เปิด" สำหรับการเข้าถึงสาธารณะ แต่โทรศัพท์มือถือของฉันจะไม่เชื่อมต่อกับเว็บไซต์หรือบริการระยะไกลผ่านแอพจนกว่าฉันจะใช้เบราว์เซอร์ของฉันและลงชื่อเข้าใช้หน้าเว็บเฉพาะที่ ISP ให้ไว้

คำถามของฉันก็คือ: ฉันจะทำขั้นตอนการรับรองความถูกต้องโดยอัตโนมัติจากอุปกรณ์ที่ไม่มีเบราว์เซอร์แบบดั้งเดิมได้อย่างไร

โดยเฉพาะอย่างยิ่งในกรณีของฉันราสเบอร์รี่ Pi กำหนดค่าด้วยซอฟต์แวร์ที่ฉันต้องการใช้ที่งานแสดงสินค้า ฯลฯ สถานที่เหล่านี้มีฮอตสปอตแบบ "เปิด" แบบเดียวกัน Raspi นั้นหมายถึงการมีอยู่ในตัวเอง มันทำธุรกิจและพูดคุยกับเว็บไซต์ แต่การเชื่อมต่อขาออกนี้ถูกปิดกั้นโดยการเชื่อมต่อ "เปิด" ของ ISP เพราะฉันไม่ได้ทำหรือฉันไม่สามารถทำส่วนเบราว์เซอร์ให้เสร็จสิ้น

สมมติว่าฉันมีหนังสือรับรองให้ทำเช่นนี้ในเครือข่ายของผู้ให้บริการเฉพาะฉันจะทำให้ส่วนนั้นของกระบวนการโดยอัตโนมัติโดยไม่ต้องให้ฉันเปิดเซสชันเทอร์มินัลกับ Pi ได้อย่างไร มีเทคโนโลยีประเภทใดที่ฉันสามารถใช้ค้นหาได้ที่นี่


สมมติว่า Pi ของคุณมี Linux wgetติดตั้งโปรแกรมหรือไม่
David Wilkins

1
คำถามของคุณไม่เกี่ยวกับ Linux หรือ Unix จริง ๆ มันเหมาะกับSuper Userมากกว่า นอกจากนี้มีเหตุผลใดที่คุณไม่ต้องการติดตั้งเบราว์เซอร์บน pi หรือไม่? คุณสามารถใช้เบราว์เซอร์บรรทัดคำสั่งแบบข้อความธรรมดาได้เสมอlinks2เช่น
terdon

@terdon ตราบใดที่ Pi ยังใช้ลีนุกซ์หรือตัวแปร Unix อื่น ๆ , คำถามก็อยู่ที่หัวข้ออย่างสมบูรณ์ ในทางกลับกันฉันไม่คิดว่า Pi เป็นคอมพิวเตอร์ตามคำจำกัดความของ SU (แต่ฉันไม่แน่ใจเกี่ยวกับสิ่งนั้นฉันไม่เคยเข้าใจคำจำกัดความนั้นหรือไม่เห็นมันเขียนไว้ที่ใดก็ได้)
Gilles 'หยุดความชั่วร้าย'

@Gilles ใช่มันเป็นหัวข้อฉันไม่ได้ลงคะแนนให้ปิด ฉันแค่บอกว่ามันน่าจะเหมาะกับ SU มากขึ้น และใช่ยินดีต้อนรับคำถาม Pi
terdon

คำตอบ:


12

กุญแจสำคัญในการแก้ปัญหาเช่นนี้คือการรู้วิธีถามคำถาม ฉันค้นหาโดย Google มองหา "วิธีเข้าถึง panera bread wifi" และเปิดใช้งานอัญมณีนี้

บทความนี้มีหลายสคริปต์ที่สามารถใช้เพื่ออำนวยความสะดวกในการเข้าสู่ระบบอัตโนมัติฉันเลือกที่จะใส่ตัวอย่างสำหรับ Panera Bread ซึ่งใช้ประโยชน์จากไลบรารี่ของ Python Mechanize library

โซลูชันใช้ประโยชน์จากไดเรกทอรีของ NetworkManagerdispatcher.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 ---"

ฉันขอแนะนำให้คุณอ่านบทความทั้งหมดหากคุณสนใจวิธีอื่นในการลงชื่อเข้าใช้อัตโนมัติบทความมีเครือข่าย WiFi เปิดอื่น ๆ อีกหลายแห่งที่เขียนขึ้นสำหรับพื้นที่บัลติมอร์


นี่อาจเป็นวิธีแก้ปัญหาเพียงอย่างเดียวโชคไม่ดีที่มันต้องใช้วิศวกรรมย้อนกลับที่เป็นธรรมในการกำหนด URL และเขตข้อมูลฟอร์มเพื่อส่งให้กับผู้ให้บริการแต่ละรายซึ่งแน่นอนว่ามีความท้าทายของตัวเองไม่ใช่อย่างน้อยที่สุด มือแรกเข้าถึงพวกเขา; ไม่จำเป็นว่าเป็นไปได้สำหรับสถานการณ์เฉพาะของฉัน ฉันเดาว่านั่นเป็นสิ่งที่ดีที่สุดที่ฉันคาดหวัง แน่นอนว่าโซลูชันของผู้ให้บริการรายใดรายหนึ่งอาจแตกสลายทันทีที่พวกเขาตัดสินใจที่จะอัปเดตฟอร์มการตรวจสอบสิทธิ์เว็บ
Octopus

1

คุณอาจสามารถส่งคำขอ HTTP เพื่อเข้าใช้งานทั้งนี้ขึ้นอยู่กับวิธีการตรวจสอบความถูกต้อง ขึ้นอยู่กับแง่มุมต่าง ๆ ของการนำไปปฏิบัติโดยเฉพาะ

โปรดจำไว้ว่าการรับรองความถูกต้องประเภทนี้จะถูกนำมาใช้เพื่อป้องกันไม่ให้ระบบปกครองตนเองในขณะที่อนุญาตเฉพาะเบราว์เซอร์เท่านั้นที่สามารถเข้าถึงได้ซึ่งเป็นสิ่งที่คุณพยายามหลีกเลี่ยง

โดยอุดมคติแล้วคุณจะมีโทรศัพท์ที่คุณสามารถตั้งค่าเป็นฮอตสปอต wifi และเชื่อมต่อ Pi ของคุณกับเครือข่ายนั้นเพื่อให้คุณสามารถทำสิ่งที่คุณต้องการ แต่ไม่ได้ฟรี

TL; DR: คนที่ขอทานไม่สามารถเลือกได้


1
หากทำผ่านเบราว์เซอร์จะต้องใช้ HTTP ดังนั้นจึงเป็นไปได้อย่างแน่นอน อย่างไรก็ตามเนื่องจากไม่มีโปรโตคอลหรือมาตรฐานสำหรับการรับรองความถูกต้องแบบนี้ (AFAIK) คุณต้องดำเนินการบางอย่างต่อผู้ให้บริการ ซึ่งจะไร้ประโยชน์หากคุณต้องการนำไปใช้ที่ไหนสักแห่งที่คุณไม่มีการดำเนินการ ฉันจะไปกับฮอตสปอตโทรศัพท์ - มันจะฟรีถ้าคุณเชื่อมต่อโทรศัพท์กับเครือข่ายเปิด
goldilocks

1

เห็นได้ชัดว่าเครือข่ายเหล่านี้ที่มีการรับรองความถูกต้องบนเว็บพึ่งพาการควบคุมการเข้าถึงโพสต์การรับรองความถูกต้องของ MAC ดังนั้นคุณสามารถรับรองความถูกต้องบนอุปกรณ์อื่นได้ในขณะที่ปลอมแปลงที่อยู่ MAC ของ Pi จากนั้น Pi ของคุณ

รับเคล็ดลับนี้จากhttp://frankiejarrett.com/how-to-connect-apple-tv-to-a-hotel-wi-fi-network/


1

หากคุณมีอุปกรณ์เครือข่ายที่สองคุณสามารถตั้งค่าการส่งต่อ NAT เชื่อมต่อกับเครือข่าย "ภายใน" ของคุณด้วยโทรศัพท์มือถือหรือแล็ปท็อปของคุณและให้ RPi ส่งต่อการเชื่อมต่อไปยังเครือข่ายที่มีขนาดใหญ่ จากนั้นตรวจสอบกับเบราว์เซอร์บนแล็ปท็อปหรือโทรศัพท์ของคุณ เครือข่ายจะเห็นที่อยู่ MAC ภายนอกของ RPi ของคุณและภาคีนั้นด้วยการเชื่อมต่อที่ผ่านการตรวจสอบสิทธิ์

ฉันทำสิ่งนี้เป็นประจำกับเราเตอร์พกพาพกพา (AirPort Express เก่า) เพื่อเชื่อมต่อกับอินเทอร์เน็ตของโรงแรมจากนั้นฉันสามารถเชื่อมต่อ Chromecast และอุปกรณ์อื่น ๆ ของฉันกับเครือข่ายนั้นโดยไม่ต้องตรวจสอบสิทธิ์อีกครั้ง

ง่ายยิ่งขึ้น ... หากอุปกรณ์เครือข่ายของคุณเป็น usb และทำงานร่วมกับแล็ปท็อปให้เชื่อมต่อกับแล็ปท็อปและเข้าสู่ระบบเครือข่าย จากนั้นเชื่อมต่อเข้ากับ RPi อีกครั้ง ควรทำงานเป็นเวลาหลายชั่วโมง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.