ホームページ >バックエンド開発 >Python チュートリアル >PythonでパブリックIPを自動取得する例の説明
以下のエディターは、Python でパブリック IP を自動的に取得する方法の例を示します。編集者はこれがとても良いと思ったので、参考として共有します。エディターと一緒に見てみましょう
0 予備知識
0.1 SQL の基礎
ubuntu、Debian シリーズのインストール:
root@raspberrypi:~/python-script# apt-get install mysql-server
Redhat、Centos シリーズインストール:
[root@localhost ~]# yum install mysql-serverデータベースにログイン
pi@raspberrypi:~ $ mysql -uroot -p -hlocalhost Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 36 Server version: 10.0.30-MariaDB-0+deb8u2 (Raspbian) Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>このうち、mysqlはクライアントコマンドです -uは指定したユーザーです -pはパスワードです -hはホストですデータベースを作成、作成しますデータテーブルデータベースの作成構文 データテーブルを作成する構文は次のとおりです
MariaDB [(none)]> help create database Name: 'CREATE DATABASE' Description: Syntax: CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name CREATE DATABASE creates a database with the given name. To use this statement, you need the CREATE privilege for the database. CREATE SCHEMA is a synonym for CREATE DATABASE. URL: https://mariadb.com/kb/en/create-database/ MariaDB [(none)]>データテーブルを作成する構文は次のとおりです
MariaDB [(none)]> help create table Name: 'CREATE TABLE' Description: Syntax: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options] Or: CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [partition_options] select_statementデータベースの作成 ServiceLogs
MariaDB [(none)]> CREATE DATABASE `ServiceLogs`Createあるデータテーブル
MariaDB [(none)]> CREATE TABLE `python_ip_logs` ( `serial_number` bigint(20) NOT NULL AUTO_INCREMENT, `time` datetime DEFAULT NULL, `old_data` varchar(50) DEFAULT NULL, `new_data` varchar(50) DEFAULT NULL, PRIMARY KEY (`serial_number`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1テーブルの内容のクエリ
MariaDB [ServiceLogs]> select * from python_ip_logs; Empty set (0.00 sec)
0.2 python 接続操作 MySQL
モジュールのダウンロードとインストールダウンロードパス: https://pypi.python.org/pypi/ mysql-pythoninstallation:安装: 解压 unzip MySQL-python-1.2.5.zip 进入解压后目录 cd MySQL-python-1.2.5/ 安装依赖 apt-get install libmysqlclient-dev 安装 python setup.py install 如果为0则安装OK echo $?connectmysql
rreee
After実行であることを意味します、あなたは表示できますmysql クライアントの SELECT ステートメントによる結果
1.1 要件
この状態では、ブロードバンドは再起動されるたびに新しい IP を取得します。幸いなことに、以前はドメイン名から IP アドレスを見つけてアクセスできる Peanut Shell ソフトウェアがあり、これが最適でしたが、最近では Peanut Shell も実名認証を必要とします。を使用できるため、パブリック IP を取得するための Python スクリプトを作成するようになりました。
成果効果: IPが変更されたときにメールで通知され、データベースにデータを書き込むことができます 1.2一般的な概念
1.3フローチャート
他のコードは描画するものではありません
2.
コードを書く2.1.1
Pythonコードを書くgetnetworkip.py
root@raspberrypi:~/python-script# cat p_mysql_3.py #!/usr/bin/env python import MySQLdb try : conn = MySQLdb.connect("主机","用户名","密码","ServiceLogs") print ("Connect Mysql successful") except: print ("Connect MySQL Fail") root@raspberrypi:~/python-script#
saveddb .py
root@raspberrypi:~/python-script# cat p_mysql1.py #!/usr/bin/env python import MySQLdb db = MySQLdb.connect("localhost","root","root","ServiceLogs") cursor = db.cursor() sql = "insert INTO python_ip_logs VALUES (DEFAULT,'2017-09-29 22:46:00','123','456')" cursor.execute(sql) db.commit() db.close() root@raspberrypi:~/python-script#
send_mail.py
root@raspberrypi:~/python-script# cat getnetworkip.py #!/usr/bin/env python # coding:UTF-8 import requests import send_mail import savedb def get_out_ip() : url = r'http://www.trackip.net/' r = requests.get(url) txt = r.text ip = txt[txt.find('title')+6:txt.find('/title')-1] return (ip) def main() : try: savedb.general_files() tip = get_out_ip() cip = savedb.read_files() if savedb.write_files(cip,tip) : send_mail.SamMail(get_out_ip()) except : return False if __name__=="__main__" : main() root@raspberrypi:~/python-script#
SELECT を使用してテーブルを表示します。効果は次のとおりです:
スクリプトを crontab に入れて、スケジュールされたタスクを実行させます
以上がPythonでパブリックIPを自動取得する例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。