0
1

More than 1 year has passed since last update.

Pythonを使ってホストにping疎通確かめるやつ作った

Posted at

Python初心者なので許してちょ()

固定IPじゃないけどサーバー立ててる

IPアドレスは固定IPと動的IPがあると言うのは一般常識だとは思いますが、
サーバーとかそういうのは基本的に固定IPを使うのがいいんでしょう。
ホントは固定IPがいい!!
ですがガキンチョな私におうちのネットに口を出す権限がないので…

力技でなんとかやってみました。

本編

実装した機能

  • ドメインからIPを
  • IPにpingを
  • 疎通しなかったらLINEで通知を

って感じ。一番最後のLINEによる通知はLINENotifyAPIを使用するので適宜アクセストークンを取得しておいてください。

コード

check.py
import socket
import subprocess
import requests
import time

domain_name = "your.domain.com"
token = "LINENotifyのトークン"
notify_url = "https://notify-api.line.me/api/notify"
header = {"Authorization": "Bearer " + token,} #ヘッダーの設定
interval = 1800 #チェック間隔(秒)

while True:
    ip_address = socket.gethostbyname(domain_name) #ドメインからIPを
	print(f"{domain_name} のIPアドレス: {ip_address}") #適当に表示させてみた
	response = subprocess.call(['ping','-c','4',ip_address]) #pingを実行
	if response == 0:
		print(f"{ip_address}は疎通しています") #レスポンス帰ってきたらこれ
	else:
		print(f"{ip_address}は疎通していません")
		ng = f"{domain_name}({ip_address})は疎通していません"
		ng_post = requests.post(notify_url, headers=header, data={"message":ng}) #疎通してなかったら通知を送信
	time.sleep(interval)

偉そうにコードの解説

まず使用するライブラリはIP取得用のsocket,ping実行用のsubprocess,LINEにpostする用のrequests,インターバル用のtimeになります。
必要であればpip installしてください。

次はもろもろの設定です。
ドメインやトークン、post時のheaderなどですね。intervalの値は単位が秒になっています。今回の例では30分になっています。

あとはIPアドレスを取得、socket.gethostbyname(domain_name)のところですね。
ここで取得したIPに対してpingコマンドを実行。
レスポンスが帰ってきたらただ疎通しましたよ〜とprintするだけ、
帰ってこなかったらLINENotifyで通知を送信。

これを指定した間隔で実行しているだけです。

以上

私はまじでpython初心者なので必要最低限な機能だけ。
なんでこんな回りくどいことしてるんだとか言わないでくださいね!!

screenで起動するためのshファイル

screenで永遠にping pongしてもらいます。

check.sh
screen -Sdm check python3 check.py
0
1
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
1