एंड्रॉइड पर वाईफ़ाई टेथरिंग (हॉटस्पॉट) की डीएचसीपी सेटिंग्स को कैसे कॉन्फ़िगर करें?


27

मेरे पीसी को एंड्रॉइड वाई-फाई हॉटस्पॉट से कनेक्ट करते समय, उसने 192.168.42.xमेरे पीसी को एक पता सौंपा । मुझे वास्तव में इसे बदलने की आवश्यकता है क्योंकि यह हमारे एक काम सबनेट के साथ संघर्ष करता है - क्या यह संभव है?


2
मेरा मोबाइल रूट हो गया है। यदि आवश्यक हो तो मुझे सिस्टम फ़ाइलों को बदलने में कोई आपत्ति नहीं है।
वीवीके

जैसा कि उपरोक्त कुछ महान उत्तरों में बारीकियों की प्रतिक्रिया के रूप में, मेरे अभ्यास में 192.168.43.0/24 रेंज है, वाईफाई टेथरिंग के लिए एंड्रॉइड / वेंडर डिफ़ॉल्ट द्वारा असाइन किया गया है और 192.168.42.0/24 यूएसबी टेथरिंग के लिए है।
जिम क्लिमोव

जवाबों:


25

दुर्भाग्य से, सिनोजेनमॉड में भी बिल्ट टेथरिंग सपोर्ट के लिए आईपी एड्रेस रेंज को बदलने का कोई तरीका नहीं है। वाई-फाई हॉटस्पॉट आईपी को Android.net.wifi.WifiStateMachine.startTethering () में हार्डकोड किया गया है ; USB टेदरिंग आईपी com.android.server.connectivity.Tethering में हार्डकोड किया गया है ।

हालाँकि, यदि आपका फोन रूट किया गया है, तो आप टेथरिंग के लिए थर्ड-पार्टी ऐप्स का उपयोग करने का प्रयास कर सकते हैं, जिसमें आईपी एड्रेस रेंज को बदलने का विकल्प होता है। उदाहरण के लिए, जब सैमसंग गैलेक्सी डब्ल्यू के लिए CyanogenMod अल्फ़ाज़ में बिल्ट यूएसबी टेथरिंग को तोड़ा गया था, तो मैंने रूट यूज़र्स के लिए वायर्ड टीथर का इस्तेमाल किया , जिसके पास ऐसा विकल्प है। वाई-फाई टेथरिंग के लिए आप उन्हीं लेखकों से वायरलेस टीथर रूट यूजर्स ऐप के लिए कोशिश कर सकते हैं , जिसमें आईपी एड्रेस रेंज बदलने का विकल्प भी है।


क्योंकि Google कोड बंद कर दिया गया था, इसलिए उपरोक्त लिंक अब काम नहीं करते हैं। कुछ लोगों ने उन रिपॉजिटरी से गीथहब तक स्रोत कोड का निर्यात किया:

हालांकि, आगे कोई विकास गतिविधि नहीं थी, और ऐप शायद हाल के एंड्रॉइड संस्करणों पर काम नहीं करते हैं।

बस अगर कोई उन अप्रचलित ऐप्स को आज़माना चाहता है, तो मैं Google कोड पुरालेख में कुछ एपीके फाइलें ढूंढने में सक्षम हूं :


जानकारी के लिए +1। मेरा डिवाइस रूटेड है, लेकिन रूट यूजर्स ऐप के लिए वायरलेस टीथर मेरे मोबाइल पर काम नहीं कर रहा है। रूट किए गए फोन पर आईपी रेंज को बदलने का कोई तरीका होना चाहिए, C'Mon Man!, Android एक खुला ओएस है सब के बाद।
वीवीके

@VVK एक तरीका है। बस स्रोत recompile।
सायकुर रहमान

आपके द्वारा उल्लेखित एप्लिकेशन अब मौजूद नहीं हैं। क्या आप ऑनलाइन कोई नया संस्करण पा सकते हैं, जब से आप प्रकाशकों का नाम जानते हैं? मैंने कुछ अन्य लोगों को पाया, लेकिन उनमें से कोई भी स्वतंत्र नहीं था ...
पीजी

@pgr को कुछ काम के लिंक मिले, लेकिन कोई नया संस्करण नहीं।
सेर्गेई

21

एंड्रॉइड बिल्टिन वाईफाई टेथरिंग को सर्वर के रूप में 192.168.43.1/24 का उपयोग करने, टेथरिंग को netdसंभालने के साथ उपयोग करने के लिए डिज़ाइन किया गया है dnsmasq। पहली DNS रेंज है 192.168.42.1-254और दूसरी DNS रेंज है 192.168.43.1-254

नेटड को बदलना आसान नहीं है। इसके साथ संवाद करने के लिए एक सॉकेट की आवश्यकता होती है, और उस सॉकेट को तब लिया जाता है जब Android टेथरिंग शुरू करता है। लेकिन हम जिस स्रोत फ़ाइलों के माध्यम से जा रहे हैं Tethering.java(मैंने Froyo का उपयोग किया) हम देखते हैं:

// usb client will be provided 192.168.42.129
private static final String USB_NEAR_IFACE_ADDR      = "192.168.42.129";
private static final String USB_NETMASK              = "255.255.255.0";

// FYI - the default wifi is 192.168.43.1 and 255.255.255.0

private String[] mDhcpRange;
private static final String DHCP_DEFAULT_RANGE1_START = "192.168.42.2";
private static final String DHCP_DEFAULT_RANGE1_STOP  = "192.168.42.254";
private static final String DHCP_DEFAULT_RANGE2_START = "192.168.43.2";
private static final String DHCP_DEFAULT_RANGE2_STOP  = "192.168.43.254";

और बाद में हम उन सीमाओं का उपयोग करते हुए देखते हैं, जैसे कि बैकअप

    mDhcpRange = context.getResources().getStringArray(
            com.android.internal.R.array.config_tether_dhcp_range);
    if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
        mDhcpRange = new String[4];
        mDhcpRange[0] = DHCP_DEFAULT_RANGE1_START;
        mDhcpRange[1] = DHCP_DEFAULT_RANGE1_STOP;
        mDhcpRange[2] = DHCP_DEFAULT_RANGE2_START;
        mDhcpRange[3] = DHCP_DEFAULT_RANGE2_STOP;
    }

Dhcp पर्वतमाला का मुख्य स्रोत 42 और 43 हार्डकोड नहीं है, लेकिन यह एक आंतरिक स्ट्रिंग सरणी array.config_tether_dhcp_range से पढ़ा जाता है। लेकिन यह वर्तमान में खाली है।

आप Android ढांचे को संपादित कर सकते हैं। मेरे फोन पर, यह है /system/framework/framework-res.apk। संपादन फ्रेमवर्क- res.apk के लिए ऑनलाइन ट्यूटोरियल के एक टन हैं , सरल स्ट्रिंग्स से लेकर पूर्ण थीमिंग तक। अपने फ़ोन और Android संस्करण के लिए एक खोजें।

मुख्य बात आप बदलना चाहते हैं /res/values/arrays.xml

ढूंढें <array name="config_tether_dhcp_range" />

में बदलो:

<string-array name="config_tether_dhcp_range">
     <item>192.168.x.y</item>
     <item>192.168.x.z</item>
</string-array>

संकलन / ज़िप / साइन इन करें आवश्यकतानुसार (एक ट्यूटोरियल का पालन करें), फिर पुनर्स्थापित करें।

यदि आप एक से अधिक रेंज चाहते हैं, तो बस दो वस्तुओं को बार-बार कॉपी करें। आपको हमेशा प्रत्येक श्रेणी के लिए एक शुरुआत और एक स्टॉप प्रदान करना होगा। इसे उसी / 24, अर्थात 192.168.50.5 और 192.168.50.99जो भी हो , रखने की कोशिश करें । आप यह पुष्टि कर सकते हैं कि यह साथ काम कर रहा है busybox ps | grep dnsmasqया यदि आपके पास व्यस्त बॉक्स नहीं है ps dnsmasqतो पीआईडी ​​का उपयोग करें cat /proc/pid/cmdline। आपको (या समान) मिलना चाहिए:

/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dccp-range = 192.168.50.5,192.168.50.99,1h

FWIW, मेरे WIFI टेथरिंग डिफ़ॉल्ट dnsmasqरेंज का उपयोग करता है, फिर भी मेरा कंप्यूटर असाइन किया गया था 192.168.43.147/24और गेटवे था 192.168.43.1/24। निश्चित नहीं है कि आपका 42.xपता किसी डिफ़ॉल्ट पर क्यों है ।


2
42 USBNET के लिए है 43 वाईफ़ाई के लिए है
Zibri

अच्छा लगता है, जहाँ आप देखते हैं?
cd

1
क्योंकि अगर आप usb द्वारा
टीथर

5

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मुझे लगा कि मैं एक अपडेट प्रदान करूंगा। यह एंड्रॉइड के कुछ निर्माताओं और संस्करणों को अब दिखाई देता है। वाईफाई हॉटस्पॉट सुविधा का उपयोग करते समय यूआई के माध्यम से डीएचसीपी सर्वर के लिए आईपी सबनेट रेंज को बदलने की अनुमति दें। यहां Android 6.0 पर चलने वाले एचटीसी वन M8 पर इसे ढूंढना है। YMMV।

मोबाइल हॉटस्पॉट स्क्रीन से, 3 डॉट्स आइकन (अधिक) पर क्लिक करें, उन्नत पर जाएं, फिर LAN सेटिंग्स। "स्थानीय आईपी" के तहत आईपी पते को अपने वांछित आईपी में बदल दें। "स्थानीय डीएचसीपी" के तहत अपने आईपी पते के सबनेट से मिलान करने के लिए शुरुआती आईपी को बदलें।

ट्रेंट


क्या आपको पता है कि नए एचटीसी फोन में भी यह विकल्प है?
आर्य

1

नोट: रूट की आवश्यकता है

डिफ़ॉल्ट डीएचसीपी आईपी पता रेंज हार्ड-कोडेड ( 1 ) है , आप इसे संशोधित स्रोत कोड के साथ रोम के पुनर्निर्माण के बिना नहीं बदल सकते। या थोड़ा हैक का उपयोग करें।

जब आप टेदरिंग पर स्विच करते हैं, तो क्या होता है (कम से कम):

  • hostapd - डेमन जो पहुंच बिंदुओं का प्रबंधन करता है - शुरू किया जाता है।
  • (एंड्रॉयड पाई से पहले हार्ड-कोडेड नेटवर्क इंटरफेस स्थापित कर रहे हैं, आईपी पते वाई-फाई इंटरफ़ेस में जोड़ा जाता है ( 2 , 3 ) , बाद में बेतरतीब ( 4 ) ), और रूटिंग तालिका में जोड़ा जाता है ( 5 ) स्थानीय नेटवर्क के लिए ( 6 )
  • dnsmasq- डीएचसीपी / डीएनएस सर्वर (पाई तक) - हार्ड-कोडेड कमांडलाइन तर्क ( 7 ) (जिसे /etc/dnsmasq.conf ( 8 ) अन्यथा) के माध्यम से सेट किया जा सकता है ) के साथ शुरू किया जाता है ।

इसलिए हम /system/bin/dnsmasqबीच में प्रक्रिया का नियंत्रण लेते हुए, एक कस्टम शेल स्क्रिप्ट के साथ बदल सकते हैं । मूल बाइनरी को कुछ और नाम दें:

# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin

स्क्रिप्ट बनाएँ /system/bin/dnsmasq:

#!/system/bin/sh

OLD_SUBNET='192.168.43'
NEW_SUBNET='192.168.1'
WIFI_INTERFACE='wlan0'
LOCAL_TABLE='97'

export PATH=/system/bin

# delete old route, add new
ip route del ${OLD_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE
ip route add ${NEW_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE

# set new IP address on Wi-Fi interface
ip address add ${NEW_SUBNET}.1/24 dev $WIFI_INTERFACE

# inject new subnet in hard-coded arguments received from netd
set -- $(printf '%s' "$*" | sed 's/'${OLD_SUBNET}'/'${NEW_SUBNET}'/g')
unset OLD_SUBNET NEW_SUBNET WIFI_INTERFACE LOCAL_TABLE

# execute original binary with new arguments
exec dnsmasq.bin $*

अपने वाई-फाई इंटरफ़ेस ( wlan0आमतौर पर) के नाम की पुष्टि करें । ip linkया के साथ की जाँच करें ls /sys/class/net/

इसके अलावा इस बात की पुष्टि अपने स्थानीय नेटवर्क अनुमार्गण तालिका है 97: grep local_network /data/misc/net/rt_tables। एंड्रॉइड का रूटिंग एक गड़बड़ है, जो हर नए रिलीज के साथ अधिक जटिल हो रहा है। इसलिए मुझे यकीन नहीं है कि यह लगातार बना रहा है या नहीं। कोई भी परिवर्तन करने से पहले, अपनी रूटिंग नीतियों और तालिकाओं की जांच करके यह पता लगाएँ कि आपको अपनी स्क्रिप्ट में क्या रखना चाहिए:

~# RULES="$(ip rule | grep -vE 'unreachable|local')"
~# echo "$RULES"
~# for t in $(echo "$RULES" | awk '{print $NF}' | uniq); do ip r s table $t; done

SELinux नियमों को भी परिभाषित करने की आवश्यकता है यदि (सभी या कुछ) पहले से परिभाषित नहीं हैं और यदि स्थिति है enforcing। Magisk suploicyया कुछ अन्य समान टूल का उपयोग करें sepolicy-inject:

# execute binaries from /system/bin
allow netd system_file dir { read open getattr search }
allow netd system_file file { read gettattr open execute execute_no_trans }

# execute /system/bin/sh
allow netd shell_exec file { read getattr open execute execute_no_trans }

# execute /system/bin/toolbox and its applets
allow netd toolbox_exec file { read gettattr open execute execute_no_trans }

# configure RPDB rules / routing tables
allow netd netd capability { sys_admin }

* रिबूट के दौरान जारी रहता नहीं, कुछ का उपयोग init.dस्क्रिप्ट या बदलने /sepolicyमेंramdisk

फ़ाइलों पर अनुमतियाँ सेट करें:

~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*

का आनंद लें!

या आप अपने स्वयं के प्रक्रियाओं को पूरा करके, कमांडलाइन से पूरा टेदरिंग सेटअप कर सकते हैं। इस उत्तर में निर्देश शामिल हैं, हालांकि प्रश्न अलग है।

सम्बंधित:

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