네트워크 토폴로지(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')}")