11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インターネット回線の速度計測(上り/下り)

Last updated at Posted at 2019-03-11

インターネット回線の速度計測

インターネット回線の上りと下りの速度計測を行う必要があり、王道であるiperfを調べていました。
https://iperf.fr/

iperfの場合、いくつかpublicなサーバーが存在するため、そちらを使って上りと下りを計測しようと考えたのですが、publicなサーバーの場合下りがうまく計測できませんでした。(クライアントからサーバーへの上り方向は測れるのですが)

public iperf server
https://iperf.fr/iperf-servers.php#public-servers

自分でAWSのEC2などにiperfをインストールするのも面倒なので、別の手段を探していたところ、speedtestというpythonのツールがありました。こちらがとても便利でしたので紹介させて頂きます。

Speed Testでやっている事

ざっとコードを見たところ、Speed Testに利用可能なサーバーリストから一番近いサーバーを探してきて、そのサーバーに対してHTTPのダウンロードとアップロードを行なっています。--secureのオプションでHTTPSのダウンロードとアップロードの計測も可能な模様です。

インストールは上記のGithubに書かれていますが、Macの場合Pipでインストール可能です。

$ pip install speedtest-cli

計測は以下のコマンドで可能です。

$ $ speedtest
Retrieving speedtest.net configuration...
Testing from XXXXX ...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by GIAM PING VIETPN.COM (Tokyo) [23.22 km]: 17.611 ms
Testing download speed................................................................................
Download: 67.19 Mbit/s
Testing upload speed................................................................................................
Upload: 92.91 Mbit/s

Pythonスクリプトから呼んでみる

Pythonスクリプトからはspeedtestをimportすれば以下のような形でテストできます。まずは、サーバーリストを取得して、一番近いサーバーを選択します。後はdownload()とupload()を実施すれば回線速度を計測する事ができます。計測結果は、それぞれbpsで出力されます。

import sys
import speedtest

def get_speed_test():
    servers = []
    stest = speedtest.Speedtest()
    stest.get_servers(servers)
    stest.get_best_server()
    return stest

def command_line_runner():
    stest = get_speed_test()
    down_result = stest.download()
    up_result = stest.upload()
    print str(down_result) + ',' + str(up_result)

if __name__ == '__main__':
    command_line_runner()

1分に一度速度を計測させてみる

上記のスクリプトを修正して、1分に1度計測するように修正する。

import speedtest
import datetime
import time

INTERVAL_SEC = 60

def get_speed_tester():
    servers = []
    stester = speedtest.Speedtest()
    stester.get_servers(servers)
    stester.get_best_server()
    return stester

def get_timestamp():
    date = datetime.datetime.now()
    timestamp = str(date.strftime('%Y-%m-%d %H:%M:%S'))
    return timestamp

def test_speed(stester):
    down_result = str(int(stester.download()))
    up_result = str(int(stester.upload()))
    return down_result, up_result

def command_line_runner():
    stester = get_speed_tester()
    print 'time,down(bps),up(bps)'
    while True:
        t1 = time.time()
        timestamp = get_timestamp()
        down_result, up_result = test_speed(stester)
        print timestamp + ',' + down_result + ',' + up_result
        t2 = time.time()
        next_sleep_time = int(INTERVAL_SEC - (t2 - t1))
        time.sleep(next_sleep_time)

if __name__ == '__main__':
    command_line_runner()
11
14
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
11
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?