0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

USBテザリングとiperfを使ってUSBケーブルのデータラインの質を測定する

Last updated at Posted at 2025-04-03

USBケーブルの質を測りたいのですが、市販のUSBテスターにデータラインの質の計測可能なものが無いため、どうするか考えてiperfを使うことにしました。

なお、ここで使っているホスト端末はUbuntu 24.04、デバイス端末はRedmi Note 11 Pro 5G (MIUI 14) です。

まずはUSBケーブルを繋いだ後にデバイス側のUSBテザリングを有効にします。USBデザリングは自分の環境では「設定」→「接続と共有」→「ポータブルホットスポット」→「USBテザリング」をオンにすることで有効となりました。
Screenshot_2025-04-03-20-52-33-331_com.android.settings.jpg

USB経由のネットワークインターフェースが有効になってるかはホスト側で以下を実行することで確認できます:

$ ifconfig `ifconfig | grep -o '^enx[^:]*'`
enx4e1fe26ad523: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 4e:1f:e2:6a:d5:23  txqueuelen 1000  (イーサネット)
        RX packets 7  bytes 668 (668.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

この時点ではまだIPアドレスが割り当てられてないため、dhclientを使ってDHCP経由でIPアドレスを割り当てる必要があります。

$ sudo dhclient -v `ifconfig | grep -o '^enx[^:]*'`
Internet Systems Consortium DHCP Client 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enx4e1fe26ad523/4e:1f:e2:6a:d5:23
Sending on   LPF/enx4e1fe26ad523/4e:1f:e2:6a:d5:23
Sending on   Socket/fallback
xid: warning: no netdev with useable HWADDR found for seed's uniqueness enforcement
xid: rand init seed (0x6791701f) built using gethostid
DHCPDISCOVER on enx4e1fe26ad523 to 255.255.255.255 port 67 interval 3 (xid=0x57ffa917)
DHCPOFFER of 192.168.86.177 from 192.168.86.196
DHCPREQUEST for 192.168.86.177 on enx4e1fe26ad523 to 255.255.255.255 port 67 (xid=0x17a9ff57)
DHCPACK of 192.168.86.177 from 192.168.86.196 (xid=0x57ffa917)
Setting LLMNR support level "yes" for "8", but the global support level is "no".
bound to 192.168.86.177 -- renewal in 1491 seconds.

しかしながらdhclientはこの際に接続の上流である標準ゲートウェイまで追加してしまうようです。そのため、追加された標準ゲートウェイを削除して標準ゲートウェイを元のままとします。

$ sudo route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         _gateway        0.0.0.0         UG    0      0        0 enx4e1fe26ad523
default         _gateway        0.0.0.0         UG    100    0        0 eno1
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eno1
192.168.86.0    0.0.0.0         255.255.255.0   U     0      0        0 enx4e1fe26ad523
$ sudo route del default dev `ifconfig | grep -o '^enx[^:]*'`
$ sudo route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         _gateway        0.0.0.0         UG    100    0        0 eno1
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eno1
192.168.86.0    0.0.0.0         255.255.255.0   U     0      0        0 enx4e1fe26ad523

これでローカルのみの接続が完了しました。まずは確認のためにホスト側でpingを打ってみます。デバイス側のIPアドレスはdhclientの時に「from 」の後に表示されたものとなります。

$ sudo ping 192.168.86.196
PING 192.168.86.196 (192.168.86.196) 56(84) bytes of data.
64 bytes from 192.168.86.196: icmp_seq=1 ttl=64 time=3.75 ms
64 bytes from 192.168.86.196: icmp_seq=2 ttl=64 time=3.58 ms
64 bytes from 192.168.86.196: icmp_seq=3 ttl=64 time=3.65 ms
^C
--- 192.168.86.196 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 3.580/3.662/3.754/0.071 ms

次は速度の計測です。ホスト側にiperf3をインストールします。

sudo apt install iperf3

デバイス側からiperf3に接続できるようにファイアーウォールでiperf3に必要なポートを開けておきます。Ubuntuではファイアーウォールにufwが使われているため、ufwコマンドで以下のように設定します。

$ sudo ufw allow from 192.168.86.0/24 to any port 5201 proto tcp
ルールを追加しました

デバイス側には「PingTools Network Utilities」をインストールします: https://play.google.com/store/apps/details?id=ua.com.streamsoft.pingtools&hl=ja

最後は実際の計測を行います。ホスト側ではiperf3サーバーを起動します:

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201 (test #1)
-----------------------------------------------------------

デバイス側では「PingTools Network Utilities」を開き、左のサイドメニューからiPerfを選択し、テキストボックスにdhclientで取得したIPアドレスを入れてStartを押します。

Screenshot_2025-04-03-20-48-22-218_ua.com.streamsoft.pingtools.jpg

計測が完了しました!

追記

USBケーブルを繋いだら自動的にローカル接続されるようにしてみました!

ネットワークインタフェースをusb0に固定する:

/etc/udev/rules.d/99-usb-tethering.rules
ACTION=="add", SUBSYSTEM=="net", ENV{ID_USB_DRIVER}=="rndis_host", NAME="usb0"

udev設定をリロード:

sudo udevadm control --reload-rules

usb0を設定:

/etc/network/interfaces
(前略)

allow-hotplug usb0
iface usb0 inet dhcp
up route del default dev usb0

ネットワーク周りを再起動:

sudo systemctl restart networking
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?