AndroidでWIFIテザリング(ホットスポット)のDHCP設定を構成する方法


27

PCをAndroid Wi-Fiホットスポットに接続すると、PCに192.168.42.xアドレスが割り当てられました。作業サブネットの1つと競合するため、これを本当に変更する必要があります-これは可能ですか?


2
私の携帯は根付いています。必要に応じてシステムファイルを変更してもかまいません。
VVK

上記のすばらしい回答のいくつかのニュアンスへの応答と同様に、私の実践では、192.168.43.0 / 24の範囲はWiFiテザリング用に割り当てられたAndroid /ベンダーのデフォルトであり、192.168.42.0 / 24はUSBテザリング用です。
ジムクリモフ

回答:


25

残念ながら、CyanogenModであっても、組み込みテザリングサポートのIPアドレス範囲を変更する方法はありません。Wi-FiホットスポットIPはandroid.net.wifi.WifiStateMachine.startTethering()にハードコーディングされています。USBテザリングIPはcom.android.server.connectivity.Tetheringにハードコードされています

ただし、電話がルート化されている場合は、IPアドレス範囲を変更するオプションがあるサードパーティ製のテザリングアプリを使用して試すことができます。たとえば、Samsung Galaxy WのCyanogenModアルファで組み込みのUSBテザリングが壊れたとき、そのようなオプションがあるルートユーザー用の有線テザーを使用しました。Wi-Fiテザリングの場合、同じ作成者のルートユーザー向けワイヤレステザーアプリ試すことができます。このアプリには、IPアドレス範囲を変更するオプションもあります。


Google Codeがシャットダウンされたため、上記のリンクは機能しなくなりました。一部の人々は、これらのリポジトリからGitHubにソースコードをエクスポートしました。

ただし、それ以上の開発活動はなく、アプリはおそらく最近のAndroidバージョンでは動作しません。

誰かがこれらの古いアプリを試してみたい場合に備えて、Google Code ArchiveでAPKファイルを見つけることができました。


情報については+1。私のデバイスはルート化されていますが、ルートユーザー向けのワイヤレステザーアプリがモバイルで動作していません。根ざした携帯電話のIP範囲を変更する何らかの方法があるはずです、C'Mon Man !、結局のところAndroidはオープンOSです。
VVK

@VVK方法があります。ソースを再コンパイルするだけです。
シャクルラーマン

あなたが言及したアプリはもう存在しないようです。出版社の名前を知っているので、オンラインで新しいバージョンを見つけることができますか?他にもいくつか見つけましたが、どれも無料ではありませんでした
...-pgr

@pgrいくつかの有効なリンクは見つかりましたが、新しいバージョンは見つかりませんでした。
セルゲイVlasov

21

AndroidのビルトインWiFiテザリングは、192.168.43.1 / 24をサーバーとして使用するように設計されてnetdおり、テザリングを処理するには、を使用しdnsmasqます。最初のDNS範囲は192.168.42.1-254andで、2番目のDNS範囲は192.168.43.1-254です。

Netdは簡単に変更できません。それと通信するためにソケットが必要であり、そのソケットは、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";

そして、後でこれらの範囲が使用されていることを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から読み取られます。しかし、現在は空です。

Androidフレームワークを編集できます。私の電話では、です/system/framework/framework-res.apk。ありますトンのチュートリアルのは、完全なテーマに、単純な文字列から、フレームワーク-res.apkを編集するためのオンライン。お使いの携帯電話とAndroidバージョン用の1つを見つけてください。

変更したい主なものは /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 /署名し(チュートリアルに従って)、再インストールします。

複数の範囲が必要な場合は、2つのアイテムを繰り返しコピーします。各範囲の開始と停止を常に提供する必要があります。同じ/ 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は、無線LANのためのものであるためである
Zibri

素敵な発見、あなたはそれを見ますか?
cde

1
USBで
テザリング

5

これは古い投稿であることは知っていますが、アップデートを提供すると思いました。一部のメーカーとAndroidのバージョンでは、WiFiホットスポット機能を使用する場合、UIを介してDHCPサーバーのIPサブネット範囲を変更できるようになりました。ここでは、Android 6.0を実行しているHTC One M8でそれを見つけることができます。YMMV。

[モバイルホットスポット]画面で、3つのドットのアイコン(詳細)をクリックし、[詳細設定]、[LAN設定]の順に移動します。[ローカルIP]で、IPアドレスを目的のIPに変更します。[ローカルDHCP]で、開始IPを変更してIPアドレスのサブネットに一致させます。

トレント


新しいHTC電話にもこのオプションがあるかどうか知っていますか?
アーヤ

1

注:ルートが必要です。

デフォルトのDHCP IPアドレスの範囲はハードコード1されており、変更されたソースコードでROMを再構築せずに変更することはできません。または、小さなハックを使用します。

テザリングをオンにすると、何が起こりますか(少なくとも):

  • hostapd -アクセスポイントを管理するデーモンが開始されます。
  • ネットワークインターフェイスが設定され、IPアドレスがWi-Fiインターフェースに追加される(Androidのパイ前にハードコードされた23、その後、無作為化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。Androidのルーティングは混乱し、すべての新しいリリースで複雑になります。したがって、これが永続的かどうかはわかりません。また、変更を行う前に、ルーティングポリシーとテーブルを確認して、スクリプトに何を入れるべきかを判断します。

~# 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ます。マジスク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.