Mac OS X เปลี่ยนการกำหนดค่า IP โดยอัตโนมัติตามตำแหน่ง (โดยเครือข่าย Wifi)?


10

Mac OS X สามารถตั้งค่าให้กำหนดค่าอินเทอร์เฟซของสนามบินโดยอัตโนมัติด้วยที่อยู่ IP แบบคงที่เมื่อเชื่อมต่อกับเครือข่าย Wifi ด้วยชื่อที่แน่นอนและในเครือข่าย Wifi อื่น ๆ ทั้งหมดใช้ DHCP หรือไม่

ขณะนี้ฉันกำลังใช้คุณสมบัติ "ตำแหน่ง" ของส่วน "เครือข่าย" ในการตั้งค่าระบบเพื่อสลับระหว่างการตั้งค่าที่อยู่ IP สองครั้งด้วยตนเอง ฉันมีการตั้งค่า "IP คงที่ของฉัน" และการตั้งค่าเริ่มต้น "DHCP" อย่างไรก็ตามสิ่งนี้ต้องการการป้อนการตั้งค่าระบบเพื่อเปลี่ยนตำแหน่งดรอปดาวน์ทุกครั้งเมื่อเปลี่ยนตำแหน่ง เป็นอัตโนมัติหรือไม่

สิ่งนี้จะทำได้โดยไม่มีซอฟต์แวร์ของบุคคลที่สาม

คำตอบ:


8

นี่ไม่ใช่สิ่งที่สามารถทำได้ง่ายๆผ่านทางระบบปฏิบัติการ

สถานที่ดังกล่าวเป็นตัวเลือกหนึ่งพร้อมด้วยฟรีแวร์ที่ตั้งสนามบินหรือ MarcoPolo หรือที่ตั้งเครือข่ายที่ต้องชำระเงิน นอกจากนี้ยังมี AppleScript ชื่อ WiFiScriptor ที่สามารถช่วยได้

แต่! คุณไม่จำเป็นต้องเข้าสู่การตั้งค่าระบบ -> เครือข่าย -> [ดรอปดาวน์ตำแหน่ง] คุณสามารถไปที่Apple Menu -> Location (ประมาณ 6 ตัวเลือก) -> [เลือกตำแหน่งที่คุณต้องการ]

-b


1
ขอบคุณสำหรับเคล็ดลับเกี่ยวกับการสลับตำแหน่งจากเมนู Apple แม้ว่าจะเป็นแบบแมนนวล แต่อย่างน้อยก็รู้สึกดีกว่าเข้าสู่การตั้งค่าระบบด้วยหลายขั้นตอน
Markus Hallmann

นอกจากนี้ขอขอบคุณที่ยืนยันว่าไม่สามารถทำได้ในปัจจุบัน (โดยไม่ใช้ซอฟต์แวร์ของบุคคลที่สาม)
Markus Hallmann

ลิงก์ตำแหน่งสนามบินดูเหมือนว่าจะชี้ไปที่เว็บไซต์สแปมตอนนี้
Nat

9

เป็นไปได้ที่จะทำโดยไม่มีบุคคลที่สามดูhttps://github.com/rimar/wifi-location-changer


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

นอกจากนี้ฉันต้องออกจากระบบและเข้าสู่ระบบก่อนที่จะเริ่มทำงานกับโยเซมิตี
djule5

1

บุคคลที่สาม, การแก้ปัญหาไม่ฟรีซึ่งอาจจะทำงานให้คุณเป็นสถานที่

ตามที่แนะนำโดยคำตอบนี้สำหรับคำถามที่คล้ายกัน แต่ไม่เหมือนกันใน stackoverflow คุณสามารถสร้างสคริปต์ที่ทำงานในช่วงเวลาปกติ launchdจะป้องกันไม่ให้ทำงานมากกว่าหนึ่งครั้ง

Psuedocode:

  • รับค่า save_wifi จากไฟล์
  • ตั้งค่า current_wifi เป็นเอาต์พุตของ networksetup -getairportnetwork AirPort
  • หาก save_wifi == current_wifi ให้ออก
  • ทำงานอื่น networksetup -switchtolocation {location}โดยที่ {location} เป็นชื่อของตำแหน่งที่คุณต้องการเปลี่ยนไปใช้ตามเครือข่าย wifi ที่พบ

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

-

อัปเดต: พบคำถามที่ซ้ำกันที่เป็นไปได้ซึ่งแนะนำวิธีแก้ปัญหา opensource: MarcoPolo


1

เนื่องจากคำตอบที่ให้นั้นเป็นคู่มือนี่คือสคริปต์ง่าย ๆ ที่จะเปลี่ยนโดยอัตโนมัติ:

สร้างสถานที่ต่างๆในการตั้งค่าระบบ> เครือข่ายเพื่อแสดงเครือข่าย WiFi แต่ละเครือข่ายของคุณ

สคริปต์: ( /usr/bin/autolocation.sh) ใส่สิ่งนี้ในบางตำแหน่งที่คุณต้องการและเปลี่ยนค่า SSID ในสคริปต์ตามสถานการณ์ของคุณ

#!/bin/sh

#get the ssid of the network we are on
ssid=`ioreg -l -n AirPortDriver | grep 80211SSID | sed 's/|//g' | sed 's/"//g' | sed 's/  */ /g' | awk '{print $3}'`

if [ $ssid = "voicegear" ]
then
        location="Office / Home"
elif [ $ssid = "vijay" ]
then
        location="Office / Home"
elif [ $ssid = "SCTHO" ]
then
        location="Shriram Santhome"
else
        location="Automatic"
fi

#update the location
newloc=`/usr/sbin/scselect "${location}" | sed 's/^.*(\(.*\)).*$/\1/'`

echo "${newloc}"

สคริปต์นี้จะเปลี่ยนตำแหน่งเครือข่าย (การตั้งค่า) ตาม SSID ของเครือข่ายไร้สาย ตอนนี้ต้องดำเนินการทุกครั้งที่มีการเปลี่ยนแปลงการตั้งค่าเครือข่าย เราจะสร้างตัวแทนเรียกใช้ให้ทำเช่นเดียวกัน

plist launchd: ( ~/Library/LaunchAgents/com.vg.netwatcher.plist)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.vg.netwatcher</string>
        <key>Program</key>
        <string>/usr/bin/autolocation.sh</string>
        <key>LaunchEvents</key>
        <dict>
                <key>com.apple.notifyd.matching</key>
                <dict>
                        <key>com.apple.system.config.network_change</key>
                        <dict>
                                <key>Notification</key>
                                <string>com.apple.system.config.network_change</string>
                        </dict>
                </dict>
        </dict>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

ฉันสร้างไฟล์นี้ใน~/Library/LaunchAgents(ภายในบ้านของฉัน) เนื่องจากฉันเป็นผู้ใช้รายเดียวที่ใช้เครื่องนี้ ถ้าคุณต้องการให้มันเป็นโลกให้ใส่เข้าไป/Library/LaunchAgentsถ้าคุณอยากให้มันเป็นโลกใส่ไว้ใน

ไฟล์นี้จะต้องเป็นของrootและมี600สิทธิ์:

sudo chown root Library/LaunchAgents/com.vg.netwatcher.pist
sudo chmod 600 Library/LauhchAgents/com.vg.netwatcher.plist

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

cd ~/Library/LaunchAgents
sudo launchctl load -w com.vg.netwatcher.plist

แค่นั้นแหละ. ตอนนี้ IP ของ Mac ของคุณจะเปลี่ยนโดยอัตโนมัติ

หมายเหตุ: ทำงานบน El Capitan ด้วย!


1

แนะนำเครื่องมือเปลี่ยนตำแหน่ง

นี่เป็นสคริปต์ที่มีแนวโน้มมากสำหรับการเปลี่ยนตำแหน่งเครือข่ายตาม WiFi SSID:

มันถูกสร้างขึ้นโดยแอนตัน Eprev คุณสามารถดูรหัสและเอกสารรายละเอียดเพิ่มเติมได้ที่ GitHub:

การติดตั้ง

มันติดตั้งผ่านทางบรรทัดคำสั่ง:

$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

มันจะขอรหัสผ่านรูทเพื่อติดตั้งlocationchangerไปยัง/usr/local/binไดเรกทอรี

แค่นั้นแหละ!

หลังจากนั้นหากมีที่ตั้งเครือข่ายที่มีชื่อเหมือนกันกับชื่อ (SSID) ของเครือข่าย WiFi ปัจจุบันก็จะเปลี่ยนเป็นที่ตั้งเครือข่ายโดยอัตโนมัติ มิฉะนั้นจะเปลี่ยนเป็นตำแหน่งอัตโนมัติ (BTW หากไม่มีตำแหน่งที่เรียกว่าอัตโนมัติจะบ่นในบันทึกและออก)

สคริปต์เฉพาะตำแหน่ง

หากคุณต้องการเรียกใช้สคริปต์ทุกครั้งที่คุณเชื่อมต่อกับเครือข่าย WiFi เฉพาะให้ใส่สคริปต์เหล่านั้น~/.locationsและตั้งชื่อสคริปต์เหล่านั้นตามเครือข่าย WiFi เช่น~/.locations/Corp Wi-Fi:

#!/usr/bin/env bash

# Require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'

และคุณอาจต้องการสร้าง~/.locations/Automaticที่จะรีเซ็ตการเปลี่ยนแปลงเหล่านั้นในสถานที่อื่น ๆ :

#!/usr/bin/env bash

# Don’t require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'

ตรวจสอบให้แน่ใจว่าได้ใช้บิตการเรียกใช้งานกับสคริปต์ ( chmod +x)

ชื่อแทนตำแหน่ง

คุณสามารถแชร์ตำแหน่งเครือข่ายระหว่างเครือข่าย WiFi หลายเครือข่ายได้ ตัวอย่างเช่นหากคุณมีเราเตอร์ไร้สายที่ออกอากาศใน 2.4 และ 5GHz ในเวลาเดียวกันคุณสามารถสร้างไฟล์กำหนดค่า~/.locations/locations.confและวางคู่คีย์ - ค่าพื้นฐานไว้ภายใน:

Home_WiFi_5GHz=Home_WiFi

นี่คือกุญแจเป็นชื่อเครือข่าย WiFiและค่าที่สอดคล้องตำแหน่งที่ตั้งเครือข่าย เข้าร่วมกับพวกเขาด้วยเครื่องหมายเท่ากับเปลือย ( =ไม่มีช่องว่าง) ในตัวอย่างข้างต้นถ้าเครือข่าย WiFi Home_WiFi_5GHzมีการเชื่อมต่อจะเปลี่ยนไปยังที่ตั้งของเครือข่ายHome_WiFi

ขอให้สังเกตว่าชื่อแทนสถานที่มีความสำคัญมากกว่ากฎชื่อเดียวกัน ในตัวอย่างข้างต้นสคริปต์เท่านั้น~/.locations/Home_WiFiจะทำงานเมื่อคุณเชื่อมต่อกับเครือข่าย WiFi Home_WiFi_5GHz

ด้วยนามแฝงตำแหน่งคุณไม่จำเป็นต้องสร้างตำแหน่งเครือข่ายเพิ่มเติมสำหรับชื่อที่ตรงกันของเครือข่าย WiFi

การแก้ไขปัญหา

คุณสามารถดูบันทึกมากมายโดยใช้คำสั่งต่อไปนี้:

$ tail -f ~/Library/Logs/LocationChanger.log

ตัวอย่างผลลัพธ์:

[2017-10-13 11:35] Connected to 'Unknown WiFi'
[2017-10-13 11:35] Location 'Unknown WiFi' was not found. Will default to 'Automatic'
[2017-10-13 11:35] Changing the location to 'Automatic'
CurrentSet updated to 6B593A12-C51B-3FF1-DE1D-87310F232147 (Automatic)
[2017-10-13 11:37] Connected to 'Home_WiFi_5GHz'
[2017-10-13 11:37] Will switch the location to 'Home_WiFi' (configuration file)
[2017-10-13 11:37] Changing the location to 'Home_WiFi'
CurrentSet updated to 7900D1E6-3820-50C6-882E-4F5K2BEF32ED (Home_WiFi)

ถอนการติดตั้ง

ก่อนอื่นให้ยกเลิกการโหลดเอเจนต์เรียกใช้:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

จากนั้นลบไฟล์ไบนารี, plist และ log:

rm ~/Library/LaunchAgents/LocationChanger.plist
rm ~/Library/Logs/LocationChanger.log
sudo rm /usr/local/bin/locationchanger

คุณยังสามารถลบไฟล์การกำหนดค่าและสคริปต์เฉพาะตำแหน่งภายใน~/.locations:

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