ネットワークトポロジー(Net3D) 言語別サンプルスクリプト
PowerShell・Bash・PythonでGIIPネットワークトポロジー(Net3D)データを収集・送信する完全なサンプルスクリプトです。APIリクエスト仕様(エンドポイント・フィールド説明)は、まずメインガイドを参照してください。
1. PowerShell (Windows)
# 設定
$AT = "YOUR_SECRET_KEY"
$API_URL = "https://your-api.azurewebsites.net/api/giipApi"
# Step 1: サーバー登録 (AgentAutoRegister) — LSSN取得
$discoveryData = @{
hostname = $env:COMPUTERNAME
os = (Get-CimInstance Win32_OperatingSystem).Caption
cpu_cores = (Get-CimInstance Win32_Processor).NumberOfLogicalProcessors
ipv4_local = (Get-NetIPAddress -AddressFamily IPv4 |
Where-Object { $_.IPAddress -ne '127.0.0.1' } |
Select-Object -First 1).IPAddress
} | ConvertTo-Json -Compress
$regBody = @{
token = $AT
text = "AgentAutoRegister"
jsondata = $discoveryData
}
$resp = Invoke-RestMethod -Uri "$API_URL`?cmd=AgentAutoRegister" `
-Method Post -ContentType "application/x-www-form-urlencoded" -Body $regBody
$lssn = $resp.lssn
Write-Host "登録完了. LSSN: $lssn"
# Step 2: netstat KVSPut
$connections = Get-NetTCPConnection -State Established | Select-Object -First 100 | ForEach-Object {
@{
remote_ip = $_.RemoteAddress
remote_port = $_.RemotePort
state = "ESTABLISHED"
process_name = (Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName
}
}
$netstatPayload = @{
kType = "lssn"
kKey = "$lssn"
kFactor = "netstat"
kValue = $connections
} | ConvertTo-Json -Compress -Depth 10
$putBody = @{
token = $AT
text = "KVSPut kType kKey kFactor"
jsondata = $netstatPayload
}
$r2 = Invoke-RestMethod -Uri $API_URL -Method Post `
-ContentType "application/x-www-form-urlencoded" -Body $putBody
Write-Host "netstat送信結果: $($r2.RstMsg)"
# Step 3: db_connections KVSPut
$dbPayload = @{
kType = "lssn"
kKey = "$lssn"
kFactor = "db_connections"
kValue = @(
@{
client_net_address = "10.0.0.5"
program_name = "MyApp.exe"
cpu_load = 15
last_sql = "SELECT * FROM users WHERE id = 1"
query_hash = "0xAB12CD34"
}
)
} | ConvertTo-Json -Compress -Depth 10
$putBody2 = @{
token = $AT
text = "KVSPut kType kKey kFactor"
jsondata = $dbPayload
}
$r3 = Invoke-RestMethod -Uri $API_URL -Method Post `
-ContentType "application/x-www-form-urlencoded" -Body $putBody2
Write-Host "db_connections送信結果: $($r3.RstMsg)"
2. Bash Shell (Linux)
#!/bin/bash
AT="YOUR_SECRET_KEY"
API_URL="https://your-api.azurewebsites.net/api/giipApi"
# Step 1: サーバー登録 (AgentAutoRegister) — LSSN取得
JSON_DATA=$(cat <<EOF
{
"hostname": "$(hostname)",
"os": "$(grep PRETTY_NAME /etc/os-release | cut -d'"' -f2)",
"cpu_cores": $(nproc),
"ipv4_local": "$(hostname -I | awk '{print $1}')"
}
EOF
)
RESP=$(curl -s -X POST "$API_URL?cmd=AgentAutoRegister" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=$AT" \
--data-urlencode "text=AgentAutoRegister" \
--data-urlencode "jsondata=$JSON_DATA")
LSSN=$(echo "$RESP" | jq -r '.lssn')
echo "登録完了. LSSN: $LSSN"
# Step 2: netstat KVSPut
CONNS=$(ss -tunp | awk '/ESTAB/{
split($5,a,":");
split($6,b,":");
printf "{\"remote_ip\":\"%s\",\"remote_port\":%s,\"process_name\":\"unknown\",\"state\":\"ESTABLISHED\"}",a[1],a[2]
}' | paste -sd,)
NETSTAT_PAYLOAD=$(cat <<EOF
{
"kType": "lssn",
"kKey": "$LSSN",
"kFactor": "netstat",
"kValue": [$CONNS]
}
EOF
)
RESP2=$(curl -s -X POST "$API_URL" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=$AT" \
--data-urlencode "text=KVSPut kType kKey kFactor" \
--data-urlencode "jsondata=$NETSTAT_PAYLOAD")
echo "netstat送信結果: $(echo "$RESP2" | jq -r '.RstMsg')"
# Step 3: db_connections KVSPut
DB_PAYLOAD=$(cat <<EOF
{
"kType": "lssn",
"kKey": "$LSSN",
"kFactor": "db_connections",
"kValue": [
{
"client_net_address": "10.0.0.5",
"program_name": "MyApp",
"cpu_load": 15,
"last_sql": "SELECT * FROM users WHERE id = 1",
"query_hash": "0xAB12CD34"
}
]
}
EOF
)
RESP3=$(curl -s -X POST "$API_URL" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=$AT" \
--data-urlencode "text=KVSPut kType kKey kFactor" \
--data-urlencode "jsondata=$DB_PAYLOAD")
echo "db_connections送信結果: $(echo "$RESP3" | jq -r '.RstMsg')"
3. Python (クロスプラットフォーム)
import json
import platform
import socket
import urllib.parse
import urllib.request
AT = "YOUR_SECRET_KEY"
BASE_URL = "https://your-api.azurewebsites.net/api/giipApi"
def api_post(url, fields):
payload = urllib.parse.urlencode(fields).encode("utf-8")
req = urllib.request.Request(
url,
data=payload,
headers={"Content-Type": "application/x-www-form-urlencoded; charset=utf-8"},
)
with urllib.request.urlopen(req) as f:
return json.loads(f.read().decode("utf-8"))
# Step 1: サーバー登録 (AgentAutoRegister) — LSSN取得
registration_data = {
"hostname": socket.gethostname(),
"os": platform.platform(),
"cpu_cores": 8,
"ipv4_local": socket.gethostbyname(socket.gethostname()),
}
resp = api_post(
f"{BASE_URL}?cmd=AgentAutoRegister",
{
"token": AT,
"text": "AgentAutoRegister",
"jsondata": json.dumps(registration_data),
},
)
lssn = resp.get("lssn")
print(f"登録完了. LSSN: {lssn}")
# Step 2: netstat KVSPut
netstat_payload = {
"kType": "lssn",
"kKey": str(lssn),
"kFactor": "netstat",
"kValue": [
{
"remote_ip": "10.0.0.10",
"remote_port": 8080,
"state": "ESTABLISHED",
"process_name": "myapp",
}
],
}
resp2 = api_post(
BASE_URL,
{
"token": AT,
"text": "KVSPut kType kKey kFactor",
"jsondata": json.dumps(netstat_payload),
},
)
print(f"netstat送信結果: {resp2.get('RstMsg')}")
# Step 3: db_connections KVSPut
db_payload = {
"kType": "lssn",
"kKey": str(lssn),
"kFactor": "db_connections",
"kValue": [
{
"client_net_address": "10.0.0.5",
"program_name": "MyApp.exe",
"cpu_load": 15,
"last_sql": "SELECT * FROM users WHERE id = 1",
"query_hash": "0xAB12CD34",
}
],
}
resp3 = api_post(
BASE_URL,
{
"token": AT,
"text": "KVSPut kType kKey kFactor",
"jsondata": json.dumps(db_payload),
},
)
print(f"db_connections送信結果: {resp3.get('RstMsg')}")