मैक ओएस एक्स पर डिफ़ॉल्ट स्क्रीन शेयरिंग / वीएनसी पोर्ट नंबर कैसे बदलें?


10

क्या इसे डिफ़ॉल्ट 5900से किसी अन्य पोर्ट में बदलने का कोई तरीका है ?


लोकलहोस्ट को छोड़कर सभी चीजों से कम से कम 5900 तक के कनेक्शन को अक्षम करें; IPfw के साथ OS X को सुरक्षित करना - CS लैब्स विकी

जवाबों:


16

आप वास्तव में मैक ओएस 10.7 लायन और 10.8 माउंटेन लायन पर ऐप्पल के वीएनसी सर्वर के लिए डिफ़ॉल्ट पोर्ट को स्विच कर सकते हैं । पोर्ट को बदलने के लिए, आपको सर्वर की प्लिस्ट फाइल को एडिट करना होगा /System/Library/LaunchDaemons/com.apple.screensharing.plist(यह फाइल 10.7 लायन से पहले के सिस्टम में मौजूद नहीं है)।

फ़ाइल को संपादित करने के लिए रूट (sudo) विशेषाधिकारों की आवश्यकता होती है। टर्मिनल में, यदि आप vi या vim से परिचित हैं, तो आप टाइप कर सकते हैं:

sudo vim /System/Library/LaunchDaemons/com.apple.screensharing.plist

या यदि आप नहीं हैं, तो आप बेहतर नैनो का उपयोग करेंगे :

sudo nano /System/Library/LaunchDaemons/com.apple.screensharing.plist

अब, आपको बस 34 लाइन (जो पढ़ता है <string>vnc-server</string>) को बदलना है <string>nnnn</string>जहाँ nnnn पोर्ट संख्या है जिसका आप उपयोग करना चाहते हैं। मुझे पता है कि यह "vnc-server" जैसे नाम को एक नंबर में बदलना अजीब लगता है, लेकिन आपको इसे करना होगा। मैंने कुछ स्पष्ट नहीं होने की स्थिति में नीचे एक उदाहरण शामिल किया है।

डिफ़ॉल्ट पोर्ट को 54321 में बदलने के लिए, आप इस तरह दिखने के लिए प्लिस्ट फाइल को एडिट करेंगे:

...
<key>Sockets</key>
  <dict>
      <key>Listener</key>
      <dict>
          <key>Bonjour</key>
          <string>rfb</string>
          <key>SockServiceName</key>
          <string>54321</string>            <!-- Change this line! -->
      </dict>
  </dict>
  <key>UserName</key>
  <string>root</string>
  <key>SHAuthorizationRight</key>
  <string>system.preferences</string>
</dict>
</plist>

फ़ाइल को सहेजने के बाद, परिवर्तन को प्रभावी बनाने के लिए, स्क्रीन शेयरिंग बंद करें और फिर शेयरिंग वरीयता फलक में, या वैकल्पिक रूप से अनलोड करें और इन आदेशों का उपयोग करके सेवा को फिर से लोड करें:

sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist

यदि आप अभी भी आस-पास हैं - एक बार जब आप ऐसा कर लेते हैं, तो उस पोर्ट से कनेक्ट करने के लिए अंतर्निहित मैक स्क्रीनशेयरिंग ऐप प्राप्त करने का एक तुलनीय तरीका है, या क्या आप तृतीय-पक्ष vnc ऐप का उपयोग करके अटक गए हैं जो आपको निर्दिष्ट करते हैं बंदरगाह?
जिम मिलर

2
ऊपर का उत्तर: "सर्वर से कनेक्ट करें ..." में, vnc निर्दिष्ट करें: //yourserver.com: 54321 (पूर्व उदाहरण पुनः पोर्ट संख्या के बाद)
जिम मिलर

अगर यह काम करता है (मैं आज रात तक जांच नहीं कर सकता) तो आप पूरी तरह से बहुत अधिक उत्थान के लायक हैं।
पॉलस्किनर

1
पुष्टि करने के लिए, हां आपको प्रत्येक OS अपडेट (वृद्धिशील अपडेट सहित) के बाद ऐसा करने की आवश्यकता होगी।
पॉलस्किनर

1
इसमें एक और नोट जोड़ने के लिए, OS X 10.11 El Capitan की नई 'रूटलेस' सुविधा का अर्थ है कि रूटलेस सुविधा को अक्षम किए बिना इस विशेष फ़ाइल को सहेजना संभव नहीं है, जिसकी अनुशंसा नहीं की जाती है। किसी को भी बिना किसी को अक्षम करने के लिए एक समाधान पता है?
पॉलस्किनर

5

मैं Google के माध्यम से इस थ्रेड को खोजने के बाद पुष्टि कर सकता हूं कि /etc/services"rfb" पोर्ट के लिए संपादन में शामिल VNC सर्वर के सुनने वाले पोर्ट बदल जाएंगे।

मैंने फ़ाइल को संपादित किया और रिबूट किया (आमतौर पर मैं सेवाओं को फिर से शुरू करने या लॉन्चडैमोन को अनलोड करने की कोशिश करूंगा लेकिन मुझे कुछ अन्य मुद्दे भी थे और परेशान नहीं किया था)। मेरे iPad पर iTeleport फिर 5900 पर कनेक्ट करने में विफल रहा और मेरे द्वारा चुने गए उच्च unprivileged पोर्ट पर सफल रहा।


यह उत्तर अब El Capitan 10.11 के साथ उपयोग करने का समाधान हो सकता है।
पॉलस्किनर

पुष्टि करने के लिए, यह अब रूट कैपिटल को अक्षम किए बिना एल कैपिटन 10.11 के लिए शायद सबसे अच्छा समाधान है ।
पॉलस्किनर

इसने फाइल शेयरिंग (smb) के लिए भी काम किया! मैंने "Microsoft-DS" के लिए पोर्ट बदल दिया
Wowfunhappy

@PaSSkinner / आदि में सब कुछ की रक्षा नहीं करता है? (मेरे पास यह अक्षम है इसलिए मुझे नहीं पता होगा)
Wowfunhappy

@Wowfunhappy आश्चर्यजनक, नहीं।
पॉलस्किनर

3

इस पर Apple.com और macosxhints.com पर विभिन्न मंचों पर चर्चा की गई है । संक्षिप्त उत्तर है "आप इसे बदल नहीं सकते"।

लंबे समय तक उत्तर इसके चारों ओर सुझाव देते हैं - तीन संभावनाएँ:

  • वैकल्पिक VNC सर्वर सॉफ्टवेयर का उपयोग करें
  • अपने कस्टम पोर्ट से 5900 तक ट्रैफ़िक पुनर्निर्देशित करने के लिए एक ssh सुरंग का उपयोग करें
  • अपने मैक पर 5900 पोर्ट पर जाने के लिए एक अलग पोर्ट पर आने वाले ट्रैफिक को लेने के लिए अपने राउटर में पोर्ट मैपिंग कॉन्फ़िगर करें।

बस पूर्णता के लिए: कुछ सुझाव देते हैं कि बंदरगाहों को बदलने /etc/Servicesसे चाल चल सकती है। मैंने कोशिश की कि (मैंने इसे बदलने के बाद अपने मैक को भी रिबूट कर दिया) कोई फायदा नहीं हुआ। और इसे कुछ और विचार देते हुए, यह उस फ़ाइल के साथ गड़बड़ करने के लिए एक बुरा विचार भी हो सकता है, क्योंकि अन्य अनुप्रयोग भी इसका उपयोग प्रसिद्ध पोर्ट नंबर प्राप्त करने के लिए कर सकते हैं यदि वे किसी विशिष्ट प्रोटोकॉल का उपयोग करके किसी तृतीय-पक्ष से कनेक्ट करना चाहते हैं। (जैसे: उस फ़ाइल में SSH पोर्ट बदलना काम करने वाला लग सकता है लेकिन एक बुरा विचार है ।)
Arjan

1
ग्रेग कैंटी द्वारा जवाब पर ध्यान दें - यह हिम तेंदुए के बाद ओएस एक्स रिलीज पर बदला जा सकता है। यह जवाब मूल रूप से ओएस एक्स लायन जारी होने से पहले लिखा गया था।
डग हैरिस

1

इस धागे में ग्रेग द्वारा दी गई जानकारी के आधार पर मैंने एक बैश स्क्रिप्ट लिखी जो आपके सिस्टम के VNC श्रवण पोर्ट को बदलने की प्रक्रिया को स्वचालित करेगी। मेरे परीक्षणों में अच्छा काम करता है। मुझे पता है अगर किसी को इसके साथ कोई समस्या है।

#!/bin/sh

#Created by Will D. on 04/10/2015
#If you find it useful (or have suggestions, feedback, etc.), shoot me an email at throwapenny@me.com.
#Requires Mac OS 10.7.x or later (tested up to and including 10.10.3)
#02/02/2016 - Updated Script to alert for SIP status

#Setting Static Variables
sourcepath="/System/Library/LaunchDaemons/"
filename="com.apple.screensharing.plist"
port=`less $sourcepath$filename | awk 'f{print $1;f=0} /SockServiceName/ {f=1}' | awk -F "<|>" '{print $3}'`
os_version=`sw_vers -productVersion`
os_version_aug=`sw_vers -productVersion | awk -F "." '{print $1$2}'`
sip_status=`csrutil status | awk '{print $5}'`
#Colors
nc='\033[0m'
light_red='\033[1;31m' #Light Red
yellow='\033[1;33m' #Yellow

clear

#Check the script is being run by root
if [ "$EUID" -ne 0 ];then
    printf "${light_red}This Script Must Run As Root${nc}\n"
    exit 0
fi

clear
printf ${yellow};echo "---------------------------------------------------------------"
echo "---                                                         ---"
echo "--- This Script Will Change Your Systems VNC Listening Port ---"
echo "---             Hit Ctrl + c to exit at anytime             ---"
echo "---                                                         ---"
echo "---------------------------------------------------------------";printf "${nc}\n"

#Check System Version
sleep 1
if [ "${os_version_aug}" -lt "107" ]; then
echo ""
echo "System OS Must Be Greater Than 10.7.x.  Aborting Script."
exit 0
else
echo ""
echo "System OS Version is" $os_version
echo "OS Requirement Met √"
echo "--------"
fi

if [ "${os_version_aug}" == "1011" ]; then
    if [ "${sip_status}" == "enabled." ]; then
        echo ""
        printf "${light_red}••• System Integrity Protection is Enabled •••${nc}\n"
        echo ""
        echo "This script modifies /System/Library/LaunchDaemons/com.apple.screensharing.plist"
        echo "Please Disable System Integrity Protection Before Running"
        echo ""
        exit 0
    fi
fi

#Give Feedback on Current Port
sleep 1
if [ "${port}" == "vnc-server" ]; then
echo ""
echo "The System's VNC Port is Currently"
echo "Set to the System Default Port of 5900."
echo "--------"
elif [ "${port}" != "vnc-server" ]; then
echo ""
echo "The System's VNC Port is Currently"
echo "Set to a Non-default Port of" $port"."
echo "--------"
fi

#Updating Port
echo ""
printf "What Port Would You Like VNC to Listen On? "
read newport
echo ""
echo "The Following Action Requires an Admin Password."
echo "Note: Your Password Will Be Visible When You Type It"
echo ""
printf "Admin Password? "
read admin_pass
sleep 1
echo ""
echo "Created" $filename".bak."
sleep 1
echo ""
echo "Updating VNC Port to" $newport"..."
echo $admin_pass | sudo -S sed -i.bak -e "s|$port|$newport|g" $sourcepath$filename
sleep 1
echo "Done"
echo ""
sleep 1

#Restarting screensharing process
echo "Restarting Screen Sharing Service..."
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist
echo "Done"
sleep 1
echo ""
echo "Your System's VNC Port is Now Set to" $newport"."
echo ""
echo "Update Complete.  All Done."

if [ "${os_version_aug}" == "1011" ]; then
    echo ""
    echo "Since you're running El Capitan"
    echo "be sure to re-enable System Integrity Protection"
    exit 0
fi

exit 0

जब मैंने लिंक को एक्सेस करने की कोशिश की - मुझे त्रुटि मिली यह सर्वर यह साबित नहीं कर सका कि यह getome.homeftp.net है; इसका सुरक्षा प्रमाणपत्र आपके कंप्यूटर के ऑपरेटिंग सिस्टम द्वारा विश्वसनीय नहीं है। यह गलत कनेक्शन या आपके कनेक्शन को बाधित करने वाले हमलावर के कारण हो सकता है।
प्रसन्ना

उस मूरनिक के बारे में क्षमा करें। लिंक के बजाय कोड पोस्ट किया गया।
विल

0

सिस्टम इंटीग्रिटी प्रोटेक्शन को डिसेबल किए बिना डिफॉल्ट पोर्ट और / या बाइंडिंग एड्रेस को बदलने के लिए , आपको एक नया लॉन्चडोमन बनाने की आवश्यकता है /Library

दुर्भाग्य से एक अलग लेबल असाइन करने पर स्क्रीन शेयरिंग एजेंट ठीक से काम नहीं करेगा। इसका मतलब है कि डेमन को उसी नाम का उपयोग करके "छायांकन" करना होगा। इसका कारण यह है कि यह स्वयं की समस्याएं हैं क्योंकि रिबूट पर, सिस्टम मूल को लोड करेगा /Systemऔर संशोधित संस्करण को अनदेखा करेगा /Library

समाधान LaunchDaemon को निष्क्रिय करना और "लॉन्चर" डेमन का उपयोग करना है जो संशोधित लॉन्चडैम को जबरन लोड करेगा। हालाँकि, अभी भी स्क्रीन साझाकरण को प्राथमिकता के माध्यम से सक्रिय करने के लिए ध्यान रखा जाना चाहिए क्योंकि यह केवल मोड को देखने में ही समाप्त हो जाएगा

क्रमशः

  1. सिस्टम प्राथमिकता में स्क्रीन शेयरिंग को सक्रिय करें
  2. निष्पादित

    sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.screensharing.plist
    
  3. निष्पादित

    sudo cp /System/Library/LaunchDaemons/com.apple.screensharing.plist /Library/LaunchDaemons/com.apple.screensharing.plist
    
  4. इसमें /Library/LaunchDaemons/com.apple.screensharing.plist, सॉकेट अनुभाग को संपादित करने के लिए देखें कि आप इसे कैसे चाहते हैं। उदाहरण के लिए सुनने पर localhost:5901:

    <key>Sockets</key>
      <dict>
        <key>Listener</key>
        <dict>
          <key>SockNodeName</key>
          <string>localhost</string>
          <key>SockServiceName</key>
          <string>5901</string>
        </dict>
    </dict>
    
  5. /Library/LaunchDaemons/com.apple.screensharing.launcher.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>Label</key>
      <string>com.apple.screensharing.launcher</string>
      <key>LaunchOnlyOnce</key>
      <true/>
      <key>RunAtLoad</key>
      <true/>
      <key>KeepAlive</key>
      <false/>
      <key>ProgramArguments</key>
      <array>
        <string>/bin/launchctl</string>
        <string>load</string>
        <string>-F</string>
        <string>/Library/LaunchDaemons/com.apple.screensharing.plist</string>
      </array>
    </dict>
    </plist>
    
  6. निष्पादित

    sudo launchctl load -w /Library/LaunchDaemons/com.apple.screensharing.launcher.plist
    

इसके बाद, स्क्रीन शेयरिंग अधिकारों को ठीक से प्रावधान किया जाएगा, डिफ़ॉल्ट डेमन स्वचालित रूप से लोड नहीं होगा, और हमारे लॉन्चर जबरन हमारे अनुकूलित डेमॉन को शुरू करेंगे।

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