giip

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

관련 문서