4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

ADBでAndroidのIPアドレスを取得したい

こういうコマンドを打ってみよう!

adb shell ip addr show | grep -oP 'inet \d+\.\d+\.\d+\.\d+' | grep -v 127.0.0.1 | grep -oP '\d+\.\d+\.\d+\.\d+'

出力例

192.168.10.64

解説

adb shell ip addr show 

ネットワークの状態を表示します。ただしIPアドレス以外にもいろいろなテキストが表示されます。
表示例:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN
    link/tunnel6 :: brd ::
4: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
    link/ether 92:b6:86:c1:01:6b brd ff:ff:ff:ff:ff:ff
    inet6 fe80::90b6:86ff:fec1:16b/64 scope link
       valid_lft forever preferred_lft forever
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 90:b6:86:c1:01:6b brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.97/24 brd 192.168.10.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::92b6:86ff:fec1:16b/64 scope link
       valid_lft forever preferred_lft forever
6: rmnet_mhi0: <UP,LOWER_UP> mtu 3584 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/[530]
7: rmnet_data0: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
8: rmnet_data1: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
9: rmnet_data2: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
10: rmnet_data3: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
11: rmnet_data4: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
12: rmnet_data5: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
13: rmnet_data6: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]
14: rmnet_data7: <> mtu 1500 qdisc noop state DOWN qlen 1000
    link/[530]

この中で必要なのはinetの後にあるIPアドレスです。

grep -oP 'inet \d+\.\d+\.\d+\.\d+'

-oオプションはマッチした部分のみを出力するための指定です。何も指定しないと、grepはマッチした行を出力します。
-PオプションはPerlの正規表現を利用する指定です。これを付けないと\dなどの指定ができません。

-o -Pと書いても良いのですが、まとめて-oPと書くこともできます。

grep -v 127.0.0.1

-vオプションは、マッチした行を除外するための指定です。127.0.0.1というアドレスは自分自身を指すものなので、今回取得したいアドレスではありません。なので除外します。

grep -oP '\d+\.\d+\.\d+\.\d+'

再び-o-Pを使って、今度はinet 192.168.10.64のような文字列から192.168.10.64の部分のみを抜き出します。

これで見事コマンドラインでIPアドレスだけを取得できました!

おまけ

adb tcpip 5555
adb connect [端末のIPアドレス]

とすることでWi-Fi越しにadbコマンドが打てるようになるのですが、毎回IPアドレスを調べて手入力するのが面倒だったので、これを1コマンドでできるようにしてみました。

adb tcpip 5555 & adb wait-for-device & adb shell ip addr show | grep -oP 'inet \d+\.\d+\.\d+\.\d+' | grep -v 127.0.0.1 | grep -oP '\d+\.\d+\.\d+\.\d+' | xargs adb connect

xargsを使うと標準出力を引数にできることを利用しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?