giip

Network Topology (Net3D) Full Example Scripts by Language

Full example scripts for collecting and submitting GIIP Network Topology (Net3D) data in PowerShell, Bash, and Python. For the API request specification (endpoints and field descriptions), see the main guide first.

1. PowerShell (Windows)

# Configuration
$AT = "YOUR_SECRET_KEY"
$API_URL = "https://your-api.azurewebsites.net/api/giipApi"

# Step 1: Server Registration (AgentAutoRegister) — Obtain 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 "Registered. 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 result: $($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 result: $($r3.RstMsg)"

2. Bash Shell (Linux)

#!/bin/bash
AT="YOUR_SECRET_KEY"
API_URL="https://your-api.azurewebsites.net/api/giipApi"

# Step 1: Server Registration (AgentAutoRegister) — Obtain 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 "Registered. 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 result: $(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 result: $(echo "$RESP3" | jq -r '.RstMsg')"

3. Python (Cross-platform)

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: Server Registration (AgentAutoRegister) — Obtain 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"Registered. 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 result: {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 result: {resp3.get('RstMsg')}")

Related Documents