PC를 Android Wi-Fi 핫스팟에 연결할 때 PC에 192.168.42.x
주소가 할당되었습니다 . 업무용 서브넷 중 하나와 충돌하므로이를 변경해야합니다. 가능합니까?
PC를 Android Wi-Fi 핫스팟에 연결할 때 PC에 192.168.42.x
주소가 할당되었습니다 . 업무용 서브넷 중 하나와 충돌하므로이를 변경해야합니다. 가능합니까?
답변:
불행히도 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 파일을 찾을 수있었습니다 .
안드로이드 내장 와이파이 테 더링이 함께 서버로 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
주소가 기본 주소 인지 잘 모르겠습니다 .
나는 이것이 오래된 게시물이라는 것을 알고 있지만 업데이트를 제공 할 것이라고 생각했습니다. WiFi 핫스팟 기능을 사용할 때 일부 제조업체 및 Android 버전에서는 이제 UI를 통해 DHCP 서버의 IP 서브넷 범위를 변경할 수 있습니다. Android 6.0을 실행하는 HTC One M8에서 찾을 수 있습니다. YMMV.
Mobile Hotspot (모바일 핫스팟) 화면에서 3 도트 아이콘 (더보기)을 클릭하고 Advanced (고급)로 이동 한 다음 LAN 설정으로 이동하십시오. "로컬 IP"에서 IP 주소를 원하는 IP로 변경하십시오. "로컬 DHCP"에서 IP 주소의 서브넷과 일치하도록 시작 IP를 변경하십시오.
트렌트
참고 : 루트가 필요합니다.
기본 DHCP IP 주소 범위는 하드 코딩되어 있으며 ( 1 ) 소스 코드를 수정하여 ROM을 다시 작성하지 않으면 변경할 수 없습니다. 또는 약간의 핵을 사용하십시오.
테 더링을 켜면 (최소한) 어떤 일이 발생합니까?
hostapd
-액세스 포인트를 관리하는 데몬이 시작되었습니다.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
스크립트를하거나 교체 /sepolicy
에ramdisk
파일에 대한 권한을 설정하십시오.
~# chown 0.0 /system/bin/dnsmasq*
~# chmod 0755 /system/bin/dnsmasq*
~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*
즐겨!
또는 명령 줄에서 전체 테 더링을 설정하여 자체 프로세스를 실행할 수 있습니다. 이 답변 에는 지침 이 포함되어 있지만 질문은 다릅니다.
관련 :