Mac OS X अपने आप IP लोकेशन (Wifi नेटवर्क द्वारा) बदल देता है?


10

क्या मैक ओएस एक्स एक निश्चित नाम के साथ वाईफाई नेटवर्क से कनेक्ट होने पर अपने एयरपोर्ट इंटरफेस को स्थिर आईपी पते के साथ स्वचालित रूप से कॉन्फ़िगर करने के लिए सेटअप किया जा सकता है, और अन्य सभी वाईफाई नेटवर्क पर डीएचसीपी का उपयोग करें?

वर्तमान में मैं सिस्टम प्रीफरेंस में "नेटवर्क" खंड के "स्थान" सुविधा का उपयोग कर रहा हूं, मैन्युअल रूप से दो आईपी पते सेटअप के बीच स्विच करने के लिए। मेरे पास "मेरा स्थिर आईपी" सेटअप है, और एक डिफ़ॉल्ट "डीएचसीपी" सेटअप है। हालाँकि, स्थानों को बदलते समय स्थान ड्रॉप-डाउन को बदलने के लिए सिस्टम वरीयताएँ दर्ज करना आवश्यक है। क्या यह स्वचालित हो सकता है?

अधिमानतः यह तृतीय-पक्ष सॉफ़्टवेयर के बिना किया जाएगा।

जवाबों:


8

यह ऐसा कुछ नहीं है जो बस ओएस के माध्यम से किया जा सकता है।

उपरोक्त स्थान एक विकल्प है, साथ में फ्रीवेयर एयरपोर्ट लोकेशन या मार्कोपोलो या पेड नेटवर्क लोकेशन भी है। इसमें WiFiScript नामक एक AppleScript भी है जो मदद कर सकता है।

तथापि! आपको सिस्टम वरीयताएँ -> नेटवर्क -> [स्थान ड्रॉपडाउन] में जाने की आवश्यकता नहीं है । आप Apple मेनू के माध्यम से जा सकते हैं -> स्थान (लगभग 6 विकल्प नीचे) -> [इच्छित स्थान का चयन करें]

बी


1
Apple मेनू से स्थानों को बदलने के बारे में टिप के लिए धन्यवाद। हालाँकि अभी भी मैनुअल है, कि कम से कम कई चरणों के साथ सिस्टम प्राथमिकता में जाने से बेहतर लगता है।
मार्कस हॉलमैन 21

यह पुष्टि करने के लिए भी धन्यवाद कि यह (वर्तमान में) तृतीय-पक्ष सॉफ़्टवेयर के बिना करना संभव नहीं है।
मार्कस हॉलमैन 21

हवाई अड्डा स्थान लिंक अब स्पैम वेबसाइट की ओर इशारा करता है
Nat

9

किसी भी तीसरे पक्ष के बिना करना संभव है, https://github.com/rimar/wifi-location-changer देखें


2
मैं बस इतना जोड़ना चाहूंगा कि इस काम के लिए, आपका स्थान का नाम वाईफाई नेटवर्क के SSID के समान होना चाहिए। स्क्रिप्ट का तर्क यह है कि यह SSID के समान नाम वाले स्थान की जाँच करता है और उसी पर स्विच करता है। यदि उस नाम के साथ कोई स्थान नहीं है, तो यह ऑटो / स्वचालित के लिए डिफ़ॉल्ट है।
रिस्ट्रामम

इसके अलावा, मुझे योसमाइट पर काम शुरू करने से पहले लॉग आउट और लॉग इन करना पड़ा।
djule5

1

एक तृतीय-पक्ष, गैर-मुक्त समाधान जो संभवतः आपके लिए काम करेगा, स्थान है

जैसा कि इस जवाब से पता चलता है, लेकिन समरूप नहीं, स्टैकओवरफ्लो पर सवाल, आप एक स्क्रिप्ट बना सकते हैं जो एक नियमित अंतराल पर चलती है। launchdइसे एक से अधिक बार चलने से रोकेंगे।

Psuedocode:

  • एक फ़ाइल से save_wifi मान प्राप्त करें
  • के उत्पादन में current_wifi सेट करें networksetup -getairportnetwork AirPort
  • अगर save_wifi == current_wifi, से बाहर निकलें
  • और चलाएं networksetup -switchtolocation {location}जहां {स्थान} उस स्थान का नाम है जिसे आप प्राप्त किए गए वाईफाई नेटवर्क के आधार पर स्विच करना चाहते हैं।

स्थानीय वाईफाई से कनेक्ट करने के साथ यहां एक चिकन और अंडे की स्थिति हो सकती है जो डीएचसीपी से एक पते की उम्मीद करने के लिए कॉन्फ़िगर करते समय आपको डीएचसीपी पता प्रदान नहीं करती है।

-

अपडेट: संभव डुप्लिकेट प्रश्न मिला जो कि एक ओपनसोर्स समाधान बताता है: मार्कोपोलो


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 के आधार पर नेटवर्क स्थान (सेटिंग्स) को बदल देगी। जब भी नेटवर्क सेटिंग में बदलाव करना हो, तो इसे चलाना होगा। हम ऐसा करने के लिए एक लॉन्च एजेंट बनाएंगे।

लॉन्च प्लास्ट: ( ~/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

बस। अब आपके Mac का IP अपने आप बदल जाएगा।

नोट: एल Capitan पर भी काम करता है!


1

पेश है लोकेशन चेंजर

यहाँ वाईफाई SSID के आधार पर नेटवर्क स्थानों को बदलने के लिए एक बहुत ही होनहार स्क्रिप्ट है:

यह एंटोन एपरव द्वारा बनाया गया है । आप GitHub पर कोड और अधिक विस्तृत दस्तावेज देख सकते हैं:

स्थापना

यह कमांड लाइन के माध्यम से स्थापित होता है:

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

यह निर्देशिका को स्थापित locationchangerकरने के लिए आपसे रूट पासवर्ड मांगेगा /usr/local/bin

बस!

उसके बाद, यदि कोई नेटवर्क स्थान है जिसका नाम वर्तमान वाईफाई नेटवर्क के नाम (SSID) के समान है , तो यह स्वचालित रूप से नेटवर्क स्थान पर स्विच हो जाएगा। अन्यथा, यह स्वचालित स्थान पर स्विच हो जाएगा । (BTW, अगर कोई स्थान नहीं है जिसे स्वचालित कहा जाता है , यह लॉग और निकास में शिकायत करता है।)

स्थान-विशिष्ट स्क्रिप्ट

यदि आप किसी विशिष्ट वाईफाई नेटवर्क से कनेक्ट होने पर हर बार स्क्रिप्ट चलाना चाहते हैं, तो उन स्क्रिप्ट को ~/.locationsवाईफाई नेटवर्क के बाद इन में डालें और नाम दें ~/.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)।

स्थान उपनाम

आप कई वाईफाई नेटवर्क के बीच एक नेटवर्क स्थान साझा कर सकते हैं। उदाहरण के लिए, यदि आपके पास एक वायरलेस राउटर है जो एक ही समय में 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

स्थान उपनामों के साथ, आपको वाईफाई नेटवर्क के नामों के मिलान के लिए अतिरिक्त नेटवर्क स्थान बनाने की भी आवश्यकता नहीं है।

समस्या निवारण

आप निम्न कमांड के साथ व्यापक लॉग देख सकते हैं:

$ 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

फिर, बाइनरी, प्लिस्ट और लॉग फ़ाइल को हटा दें:

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

आप कॉन्फ़िगरेशन फ़ाइलों और स्थान-विशिष्ट स्क्रिप्ट को भी अंदर निकाल सकते हैं ~/.locations:

rm -rf ~/.locations
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.