Android에서 WIFI 테 더링 (핫스팟)의 DHCP 설정을 구성하는 방법


27

PC를 Android Wi-Fi 핫스팟에 연결할 때 PC에 192.168.42.x주소가 할당되었습니다 . 업무용 서브넷 중 하나와 충돌하므로이를 변경해야합니다. 가능합니까?


2
내 휴대 전화는 뿌리입니다. 필요한 경우 시스템 파일을 변경하지 않아도됩니다.
VVK 2016 년

위의 위대한 답변 중 일부에서 뉘앙스에 대한 응답과 마찬가지로 필자의 연습에서 192.168.43.0/24 범위는 WiFi 테 더링에 할당 된 Android / 공급 업체 기본이며 192.168.42.0/24는 USB 테 더링에 대한 것입니다.
Jim Klimov

답변:


25

불행히도 CyanogenMod에서도 내장 테 더링 지원을위한 IP 주소 범위를 변경할 수있는 방법이 없습니다. Wi-Fi 핫스팟 IP는 android.net.wifi.WifiStateMachine.startTethering ()에 하드 코딩됩니다 . USB 테 더링 IP는 com.android.server.connectivity.Tethering에 하드 코딩됩니다 .

그러나 전화기가 루팅 된 경우 테 더링에 타사 앱을 사용하여 IP 주소 범위를 변경할 수 있습니다. 예를 들어, 내장 USB 테 더링이 Samsung Galaxy W의 CyanogenMod 알파에서 끊어지면 루트 사용자를 위해 Wired Tether를 사용했습니다 . Wi-Fi 테 더링의 경우 동일한 작성자의 루트 사용자 용 무선 테더 앱을 사용해 볼 수 있으며 IP 주소 범위를 변경하는 옵션도 있습니다.


Google 코드가 종료되었으므로 위의 링크가 더 이상 작동하지 않습니다. 어떤 사람들은 그 저장소에서 소스 코드를 GitHub로 내보냈습니다.

그러나 더 이상 개발 활동이 없었으며 앱이 더 이상 최신 Android 버전에서 작동하지 않을 수 있습니다.

누군가가 그 오래된 앱을 사용 해보고 싶을 때 Google Code Archive 에서 일부 APK 파일을 찾을 수있었습니다 .


정보는 +1입니다. 기기가 루팅되었지만 무선 사용자 용 무선 테더 앱이 모바일에서 작동하지 않습니다. 루팅 된 전화 C'Mon Man!에서 IP 범위를 변경하는 방법이 있어야합니다. Android는 결국 개방형 OS입니다.
VVK

@VVK 방법이 있습니다. 소스를 다시 컴파일하십시오.
Syakur Rahman

언급 한 앱이 더 이상 존재하지 않는 것 같습니다. 게시자의 이름을 알고 있으므로 온라인에서 새 버전을 찾을 수 있습니까? 나는 다른 사람들을 찾았지만 그들 중 누구도 자유로울 수 없었습니다.
pgr

@pgr 작동하는 링크가 있지만 최신 버전은 없습니다.
Sergey Vlasov

21

안드로이드 내장 와이파이 테 더링이 함께 서버로 192.168.43.1/24를 사용하도록 설계되었습니다 netd의 테 더링을 처리하여 dnsmasq. 첫 번째 DNS 범위는 192.168.42.1-254이고 두 번째 DNS 범위는 192.168.43.1-254입니다.

Netd는 변경하기 쉽지 않습니다. 통신하려면 소켓이 필요하며 안드로이드가 테 더링을 시작할 때 해당 소켓이 사용됩니다. 그러나 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";

나중에 우리는 AS BACKUPS라는 범위를 사용했습니다 .

    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에서 읽습니다. 그러나 현재 비어 있습니다.

안드로이드 프레임 워크를 편집 할 수 있습니다. 내 휴대폰에서는입니다 /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>

필요에 따라 컴파일 / zip / 서명 한 후 (자습서에 따라) 다시 설치하십시오.

하나 이상의 범위를 원하면 두 항목을 반복해서 복사하십시오. 항상 각 범위마다 시작과 정지를 제공해야합니다. 같은 / 24, 즉 192.168.50.5 192.168.50.99또는 그 밖의 어떤 곳에도 유지하십시오. 작동하고 있는지 확인 busybox ps | grep dnsmasq하거나 busybox가 없으면 ps dnsmasq에서 pid를 사용하십시오 cat /proc/pid/cmdline. 당신은 (또는 비슷한)을 받아야합니다 :

/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dhcp-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은 Wi-Fi 용
Zibri

잘 봤어, 어디서 봤어?
cde

1
당신이 USB로 밧줄
Zibri

5

나는 이것이 오래된 게시물이라는 것을 알고 있지만 업데이트를 제공 할 것이라고 생각했습니다. WiFi 핫스팟 기능을 사용할 때 일부 제조업체 및 Android 버전에서는 이제 UI를 통해 DHCP 서버의 IP 서브넷 범위를 변경할 수 있습니다. Android 6.0을 실행하는 HTC One M8에서 찾을 수 있습니다. YMMV.

Mobile Hotspot (모바일 핫스팟) 화면에서 3 도트 아이콘 (더보기)을 클릭하고 Advanced (고급)로 이동 한 다음 LAN 설정으로 이동하십시오. "로컬 IP"에서 IP 주소를 원하는 IP로 변경하십시오. "로컬 DHCP"에서 IP 주소의 서브넷과 일치하도록 시작 IP를 변경하십시오.

트렌트


새 HTC 전화에도이 옵션이 있는지 알고 있습니까?
Arya

1

참고 : 루트가 필요합니다.

기본 DHCP IP 주소 범위는 하드 코딩되어 있으며 ( 1 ) 소스 코드를 수정하여 ROM을 다시 작성하지 않으면 변경할 수 없습니다. 또는 약간의 핵을 사용하십시오.

테 더링을 켜면 (최소한) 어떤 일이 발생합니까?

  • hostapd -액세스 포인트를 관리하는 데몬이 시작되었습니다.
  • 네트워크 인터페이스가 설정되고, IP 어드레스가 무선 인터넷 인터페이스에 추가된다 (안드로이드 원형 전에 하드 코딩 된 ( 2 , 3 ) , 그 후 랜덤 ( 4 ) ) 및 라우팅 테이블에 추가 ( 5 ) 로컬 네트워크 ( 6 ) .
  • dnsmasq-DHCP / DNS 서버 (최대 파이)-하드 코딩 된 명령 줄 인수 ( 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 $*

Wi-Fi 인터페이스 이름 ( 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 규칙은 (모두 또는 일부) 아직 정의되지 않은 상태이고 status가 인 경우 정의해야합니다 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스크립트를하거나 교체 /sepolicyramdisk

파일에 대한 권한을 설정하십시오.

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

즐겨!

또는 명령 줄에서 전체 테 더링을 설정하여 자체 프로세스를 실행할 수 있습니다. 이 답변 에는 지침 포함되어 있지만 질문은 다릅니다.

관련 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.