gcpクラウド連携
This commit is contained in:
parent
ec70067900
commit
adb88a5849
@ -3,3 +3,10 @@ MQTT_HOST=localhost
|
||||
MQTT_PORT=1883
|
||||
MQTT_DEVICE_CODE=test0001
|
||||
|
||||
# MQTT AWS IoT Core
|
||||
AWS_MQTT_HOST=a4wl7j5nic1q9-ats.iot.ap-southeast-2.amazonaws.com
|
||||
AWS_MQTT_PORT=8883
|
||||
AWS_MQTT_DEVICE=devel_mqtt_device
|
||||
AWS_CA_PATH=../aws/connect_device_package/root-CA.crt
|
||||
AWS_CERT_PATH=../aws/connect_device_package/devel_mqtt_device.cert.pem
|
||||
AWS_KEY_PATH=../aws/connect_device_package/devel_mqtt_device.private.key
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,6 @@
|
||||
mqttmock
|
||||
/aws/connect_device_package*
|
||||
.env
|
||||
*pem
|
||||
*key
|
||||
*crt
|
||||
0
aws/.gitkeep
Normal file
0
aws/.gitkeep
Normal file
95
client/mqtt_client_aws.py
Normal file
95
client/mqtt_client_aws.py
Normal file
@ -0,0 +1,95 @@
|
||||
import paho.mqtt.client as mqtt
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
import time
|
||||
import json
|
||||
|
||||
|
||||
load_dotenv(dotenv_path=".env")
|
||||
|
||||
AWS_MQTT_HOST = os.getenv("AWS_MQTT_HOST")
|
||||
AWS_MQTT_PORT = int(os.getenv("AWS_MQTT_PORT"))
|
||||
AWS_MQTT_DEVICE = os.getenv("AWS_MQTT_DEVICE")
|
||||
AWS_CA_PATH = os.getenv("AWS_CA_PATH")
|
||||
AWS_CERT_PATH = os.getenv("AWS_CERT_PATH")
|
||||
AWS_KEY_PATH = os.getenv("AWS_KEY_PATH")
|
||||
|
||||
|
||||
def on_connect_mock(client, userdata, flags, rc, properties=None):
|
||||
print(f"on_connect: rc={rc}")
|
||||
|
||||
|
||||
def on_disconnect_mock(client, userdata, rc):
|
||||
print(f"on_disconnect: rc={rc}")
|
||||
if rc != 0:
|
||||
print("Unexpected disconnection.")
|
||||
|
||||
|
||||
def on_publish_mock(client, userdata, mid):
|
||||
print("on_publish: {0}".format(mid))
|
||||
|
||||
|
||||
def on_subscribe_mock(mqttc, obj, mid, granted_qos):
|
||||
print("on_subscribe: "+str(mid)+" "+str(granted_qos))
|
||||
|
||||
|
||||
def on_message_mock(client, userdata, msg):
|
||||
print(f"on_message")
|
||||
print("Received message '" + str(msg.payload) +
|
||||
"' on topic '" + msg.topic + "' with QoS " + str(msg.qos))
|
||||
payload_str = msg.payload.decode('utf-8')
|
||||
print(f"{payload_str}")
|
||||
|
||||
|
||||
def test_mqtt_mock():
|
||||
# connect処理
|
||||
print("AWS_MQTT_HOST:", AWS_MQTT_HOST)
|
||||
print("AWS_MQTT_DEVICE:", AWS_MQTT_DEVICE)
|
||||
print("AWS_MQTT_PORT:", AWS_MQTT_PORT)
|
||||
print("AWS_CA_PATH:", AWS_CA_PATH)
|
||||
print("AWS_CERT_PATH:", AWS_CERT_PATH)
|
||||
print("AWS_KEY_PATH:", AWS_KEY_PATH)
|
||||
client = mqtt.Client(client_id=AWS_MQTT_DEVICE, clean_session=False)
|
||||
client.tls_set(AWS_CA_PATH, AWS_CERT_PATH, AWS_KEY_PATH)
|
||||
|
||||
client.on_connect = on_connect_mock
|
||||
client.on_disconnect = on_disconnect_mock
|
||||
client.on_publish = on_publish_mock
|
||||
client.on_subscribe = on_subscribe_mock
|
||||
client.on_message = on_message_mock
|
||||
client.connect(AWS_MQTT_HOST, AWS_MQTT_PORT, 60)
|
||||
time.sleep(30)
|
||||
|
||||
topic = f"device/{AWS_MQTT_DEVICE}/command"
|
||||
client.subscribe(topic, qos=1)
|
||||
print(f"client.subscribe:{topic}")
|
||||
client.loop_start()
|
||||
while True:
|
||||
try:
|
||||
client.loop()
|
||||
print("publish start.")
|
||||
topic = f"device/{AWS_MQTT_DEVICE}/send"
|
||||
data = {"message": "test"}
|
||||
message = json.dumps(data).encode('utf-8')
|
||||
print(f"topic:{topic}")
|
||||
client.publish(topic, message, qos=1)
|
||||
time.sleep(30)
|
||||
except KeyboardInterrupt as e:
|
||||
time.sleep(30)
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"error:{e}")
|
||||
time.sleep(30)
|
||||
|
||||
print(f"end")
|
||||
client.loop_stop()
|
||||
client.disconnect()
|
||||
|
||||
|
||||
def main():
|
||||
print("Mqtt Mock Client Start.")
|
||||
test_mqtt_mock()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
95
client/mqtt_client_aws_manual.py
Normal file
95
client/mqtt_client_aws_manual.py
Normal file
@ -0,0 +1,95 @@
|
||||
import paho.mqtt.client as mqtt
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
import time
|
||||
import json
|
||||
|
||||
|
||||
load_dotenv(dotenv_path=".env")
|
||||
|
||||
AWS_MQTT_HOST = os.getenv("AWS_MQTT_HOST")
|
||||
AWS_MQTT_PORT = int(os.getenv("AWS_MQTT_PORT"))
|
||||
AWS_MQTT_DEVICE = os.getenv("AWS_MQTT_DEVICE")
|
||||
AWS_CA_PATH = os.getenv("AWS_CA_PATH")
|
||||
AWS_CERT_PATH = os.getenv("AWS_CERT_PATH")
|
||||
AWS_KEY_PATH = os.getenv("AWS_KEY_PATH")
|
||||
|
||||
|
||||
def on_connect_mock(client, userdata, flags, rc, properties=None):
|
||||
print(f"on_connect: rc={rc}")
|
||||
|
||||
|
||||
def on_disconnect_mock(client, userdata, rc):
|
||||
print(f"on_disconnect: rc={rc}")
|
||||
if rc != 0:
|
||||
print("Unexpected disconnection.")
|
||||
client.reconnect()
|
||||
|
||||
|
||||
def on_publish_mock(client, userdata, mid):
|
||||
print("on_publish: {0}".format(mid))
|
||||
|
||||
|
||||
def on_subscribe_mock(mqttc, obj, mid, granted_qos):
|
||||
print("on_subscribe: "+str(mid)+" "+str(granted_qos))
|
||||
|
||||
|
||||
def on_message_mock(client, userdata, msg):
|
||||
print(f"on_message")
|
||||
print("Received message '" + str(msg.payload) +
|
||||
"' on topic '" + msg.topic + "' with QoS " + str(msg.qos))
|
||||
payload_str = msg.payload.decode('utf-8')
|
||||
print(f"{payload_str}")
|
||||
|
||||
|
||||
def test_mqtt_mock():
|
||||
# connect処理
|
||||
print("AWS_MQTT_HOST:", AWS_MQTT_HOST)
|
||||
print("AWS_MQTT_DEVICE:", AWS_MQTT_DEVICE)
|
||||
print("AWS_MQTT_PORT:", AWS_MQTT_PORT)
|
||||
print("AWS_CA_PATH:", AWS_CA_PATH)
|
||||
print("AWS_CERT_PATH:", AWS_CERT_PATH)
|
||||
print("AWS_KEY_PATH:", AWS_KEY_PATH)
|
||||
client = mqtt.Client(client_id=AWS_MQTT_DEVICE, clean_session=False)
|
||||
client.tls_set(AWS_CA_PATH, AWS_CERT_PATH, AWS_KEY_PATH)
|
||||
|
||||
client.on_connect = on_connect_mock
|
||||
client.on_disconnect = on_disconnect_mock
|
||||
client.on_publish = on_publish_mock
|
||||
client.on_subscribe = on_subscribe_mock
|
||||
client.on_message = on_message_mock
|
||||
client.connect(AWS_MQTT_HOST, AWS_MQTT_PORT, 60)
|
||||
time.sleep(30)
|
||||
|
||||
topic = f"device/{AWS_MQTT_DEVICE}/command"
|
||||
client.subscribe(topic, qos=1)
|
||||
print(f"client.subscribe:{topic}")
|
||||
client.loop_start()
|
||||
while True:
|
||||
try:
|
||||
print("publish start.")
|
||||
topic = f"device/{AWS_MQTT_DEVICE}/send"
|
||||
data = {"message": "test"}
|
||||
message = json.dumps(data).encode('utf-8')
|
||||
print(f"topic:{topic}")
|
||||
client.publish(topic, message, qos=1)
|
||||
time.sleep(30)
|
||||
except KeyboardInterrupt as e:
|
||||
time.sleep(30)
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"error:{e}")
|
||||
time.sleep(30)
|
||||
|
||||
print(f"end")
|
||||
client.loop_stop()
|
||||
client.disconnect()
|
||||
|
||||
|
||||
def main():
|
||||
print("Mqtt Mock Client Start.")
|
||||
test_mqtt_mock()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
26
documents/aws.md
Normal file
26
documents/aws.md
Normal file
@ -0,0 +1,26 @@
|
||||
# AWSでIoT Coreで接続する方法
|
||||
|
||||
**前提条件:**
|
||||
|
||||
* `AWS IoT Core`を開く
|
||||
* デバイスの登録
|
||||
* `1 個のデバイスを接続`をクリックする
|
||||
* 新しいモノを作成
|
||||
* モノの名前: devel_mqtt_device
|
||||
* 環境にあわせてSDKを設定してください
|
||||
---
|
||||
|
||||
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
|
||||
|
||||
**ポートに関する情報:**
|
||||
|
||||
* ポート8883: セキュアな MQTT over TLS 通信に使用されます。
|
||||
* ポート443: MQTT over WebSocket での通信に使用されます。こちらはHTTPベースの通信が必要な場合に使われることが多いです。
|
||||
|
||||
**ポリシーの設定:**
|
||||
|
||||
はじめはポリシーが制限されているので
|
||||
Pahoから実行すると弾かれてしまいます。
|
||||
|
||||
device/devel_mqtt_device/command
|
||||
device/devel_mqtt_device/send
|
||||
35
documents/gcp.md
Normal file
35
documents/gcp.md
Normal file
@ -0,0 +1,35 @@
|
||||
# GCP + ClearBlade でIoT環境を構築する
|
||||
|
||||
https://docs.clearblade.com/iotcore/quick-start
|
||||
|
||||
## Registryを作成する
|
||||
|
||||
* レジストリのID(識別子):任意の名前を付けることができます
|
||||
* リージョン(サーバーの設置場所):最も近いリージョンを選びます。
|
||||
* 通信の速度やパフォーマンスに影響
|
||||
* Pub/Sub(任意): Google CloudのPub/Subサービス/新しいトピック(メッセージの送受信チャンネル)を作成
|
||||
* デバイスがメッセージを送受信できるようになります。
|
||||
|
||||
|
||||
## デバイスを作成する
|
||||
|
||||
* デバイスID:GCPTEST0001
|
||||
|
||||
## Credentials(資格情報の作成)
|
||||
|
||||
デバイスの認証に使用する鍵ペアを生成します。
|
||||
セキュアな通信を確保するために必要です。
|
||||
|
||||
|
||||
デバイスの鍵ペア(公開鍵と秘密鍵)を生成します。
|
||||
これを使って、デバイスがサーバーとセキュアに通信できるようにします。
|
||||
|
||||
```sh
|
||||
wsl
|
||||
openssl req -x509 -newkey rsa:2048 -keyout rsa_private.pem -nodes \
|
||||
-out rsa_cert.pem -subj "/CN=unused"
|
||||
```
|
||||
|
||||
## CA certificatesを設定する
|
||||
|
||||
|
||||
59
documents/tcp_scan.md
Normal file
59
documents/tcp_scan.md
Normal file
@ -0,0 +1,59 @@
|
||||
## Windowsの場合
|
||||
|
||||
現在はWiresharkが推奨されています。
|
||||
Wiresharkでキャプチャするのが良いでしょう
|
||||
|
||||
* ダウンロード先:
|
||||
* https://www.wireshark.org/download.html
|
||||
|
||||
|
||||
### Wiresharkを利用する
|
||||
|
||||
* リアルタイムでネットワークトラフィックをキャプチャし、解析することができます。
|
||||
* Windows、macOS、Linuxなど、複数のプラットフォームで利用できます。
|
||||
* グラフィカルなユーザーインターフェースがあり、直感的に操作が可能です。
|
||||
* 特定の条件に基づいてパケットをフィルタリングすることができ、効率よく抽出できます。
|
||||
|
||||
|
||||
#### コマンドラインでリアルタイムでキャプチャする
|
||||
|
||||
Wiresharkに含まれているコマンドラインツール tshark を使用することで、
|
||||
リアルタイムにプロンプトにネットワークパケットを出力できます。
|
||||
|
||||
```cmd
|
||||
tshark -i 1
|
||||
```
|
||||
|
||||
<!-- 13.238.32.90 -->
|
||||
# ip.src == 2400:2650:41a1:2600:7163:1836:c090:b765
|
||||
# ip.dst == 2403:b300:ff00::dd2:33e0
|
||||
# tcp.srcport == 49173
|
||||
# tcp.dstport == 8883
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 標準のコマンドとしてnetshを利用する場合
|
||||
|
||||
ETLフォーマットのファイルで出力されますが
|
||||
Wiresharkなどで読み取るためには PCAP 形式に変換するか、解析できるツールを使います。
|
||||
netsh trace コマンドで直接プロンプトにリアルタイムでパケットの内容を表示することはできません。
|
||||
|
||||
```sh
|
||||
netsh trace start capture=yes
|
||||
|
||||
netsh trace stop
|
||||
```
|
||||
|
||||
```sh
|
||||
netsh trace start capture=yes IPv4.Address=<ターゲットIPアドレス>
|
||||
```
|
||||
|
||||
|
||||
下記のツールはMicrosoftの公式から出ておりましたが
|
||||
現在はsupportが終了されています。
|
||||
|
||||
* Microsoft Message Analyzer
|
||||
* Microsoft Network Monitor
|
||||
|
||||
|
||||
0
gcp/.gitkeep
Normal file
0
gcp/.gitkeep
Normal file
Loading…
x
Reference in New Issue
Block a user