Question Analysis
On a Windows endpoint, review process creation logs to uncover when a built-in utility was used to reveal ARP entries. What exact command was used to list the ARP cache?
2d5a61f5-0447-4be4-944a-1f8530ed6574
Question ID
18/22
Models Correct
1
Valid Answer
82%
Success Rate
Reference Answer
Human-validated correct answer for this question
arp -a
Model Performance Comparison
See how different AI models performed on this question
Model | Answer | KQL Query | Status | Attempts | Time | Cost |
---|---|---|---|---|---|---|
gemini-2.5-flash-preview-04-17 | arp -a | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where ProcessCommandLine contains "arp" and ProcessCommandLine contains "-a"
| project Timestamp, DeviceName, ProcessCommandLine
| order by Timestamp asc | Correct | 3 | 20.37s | 0.0092 |
gpt-35-turbo | arp -a | DeviceProcessEvents | where ActionType == 'ProcessCreated' and ProcessCommandLine contains 'arp -a' | project ProcessCommandLine, ProcessCreationTime, InitiatingProcessCommandLine, InitiatingProcessCreationTime | Correct | 3 | 5.56s | 0.0093 |
gpt-4-turbo-2024-04-09 | arp -a | DeviceProcessEvents
| where InitiatingProcessCommandLine has 'arp' and InitiatingProcessCommandLine has '-a'
| project DeviceName, InitiatingProcessCommandLine, ProcessCreationTime | Correct | 1 | 14.24s | 0.1106 |
gpt-4.1 | arp -a | DeviceProcessEvents
| where (tolower(FileName) has "arp" or tolower(ProcessCommandLine) has "arp")
| where ProcessCommandLine matches regex @"arp(.exe)?\s+(-a|-g)"
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine | Correct | 4 | 15.09s | 0.0402 |
gpt-4.1-finetuned | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0296 |
gpt-4.1-mini | arp -a | DeviceProcessEvents
| where FileName =~ "arp.exe" or ProcessCommandLine contains "arp"
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, ProcessCommandLine
| order by TimeGenerated desc | Correct | 1 | 2.73s | 0.0034 |
gpt-4.1-nano | arp -a | DeviceProcessEvents
| where ProcessCommandLine contains 'arp -a'
| project ProcessCreationTime, DeviceName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessId, InitiatingProcessCommandLine
| order by ProcessCreationTime desc | Correct | 1 | 21.40s | 0.0010 |
gpt-4o | arp -a | DeviceProcessEvents
| where ProcessCommandLine contains 'arp' and ProcessCommandLine contains ' -a'
| project TimeGenerated, DeviceName, ProcessCommandLine, InitiatingProcessAccountName | Correct | 1 | 17.45s | 0.0212 |
gpt-5-high | arp -a | DeviceProcessEvents
| where ActionType == "ProcessCreated"
| where isnotempty(ProcessCommandLine)
| where
(
(FileName =~ "arp.exe" or ProcessCommandLine matches regex @"(?i)\barp(\.exe)?\b")
and ProcessCommandLine matches regex @"(?i)\s-(a|g)\b"
)
or
(
(FileName =~ "netsh.exe" or ProcessCommandLine matches regex @"(?i)\bnetsh(\.exe)?\b")
and ProcessCommandLine matches regex @"(?i)\binterface\s+(ip|ipv4)\s+show\s+neighbors?\b"
)
| project Timestamp, DeviceName, AccountDomain, AccountName, FileName, FolderPath, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, ProcessId
| summarize FirstSeen=min(Timestamp), LastSeen=max(Timestamp), Executions=count() by DeviceName, AccountDomain, AccountName, ProcessCommandLine
| order by LastSeen desc | Correct | 1 | 83.04s | 0.0465 |
gpt-5-mini-high | arp -a | union DeviceProcessEvents, DeviceEvents
| extend cmd = tolower(coalesce(ProcessCommandLine, InitiatingProcessCommandLine, ""))
// Filter for common ways to list ARP neighbors/cache: arp.exe (arp -a), Get-NetNeighbor / Get-NetIPNeighbor, and netsh neighbor show
| where cmd contains "arp" or cmd contains "get-netneighbor" or cmd contains "get-netipneighbor" or (cmd contains "netsh" and (cmd contains "neighbor" or cmd contains "show neighbors"))
| extend matched = case(
cmd contains "get-netneighbor" or cmd contains "get-netipneighbor", "Get-NetNeighbor",
cmd contains "arp", "arp.exe",
cmd contains "netsh" and (cmd contains "neighbor" or cmd contains "show neighbors"), "netsh neighbors",
"other")
| project TimeGenerated, ProcessCreationTime, DeviceName, AccountName, FileName, ProcessId, InitiatingProcessId, InitiatingProcessFileName, ProcessCommandLine, InitiatingProcessCommandLine, matched
| order by ProcessCreationTime desc | Correct | 1 | 30.78s | 0.0101 |
gpt-5-mini-low | arp -a | // Query to find when built-in utilities were used to list ARP cache (arp.exe, netsh show neighbors, Get-NetNeighbor)
// Timerange should be set by the caller; uncomment/adjust the where Timestamp >= ago(...) line if needed.
let arp_regex = @"(?i)\barp(\.(exe))?\b(\s+(-a|-g|/a|/g)\b)?";
let netsh_neighbors_regex = @"(?i)\bnetsh\b.*\b(interface|ip|ipv4)\b.*\b(show)\b.*\b(neighb|neighbors|arp)\b";
let get_netneighbor_regex = @"(?i)\bGet-NetNeighbor\b|\bGet\-NetNeighbor\b|\bGetNeighbors\b";
// Preferred: DeviceProcessEvents
DeviceProcessEvents
// | where Timestamp >= ago(30d) // set timerange externally
| where isnotempty(ProcessCommandLine) or isnotempty(FileName)
| extend cmd = tostring(ProcessCommandLine), exe = tolower(tostring(FileName))
| where cmd matches regex arp_regex or cmd matches regex netsh_neighbors_regex or cmd matches regex get_netneighbor_regex or exe contains "arp"
| extend MatchedCommand =
iff(cmd matches regex arp_regex, extract(arp_regex, 0, cmd),
iff(cmd matches regex netsh_neighbors_regex, extract(netsh_neighbors_regex, 0, cmd),
iff(cmd matches regex get_netneighbor_regex, extract(get_netneighbor_regex, 0, cmd), exe)))
| summarize arg_max(Timestamp, *) by ProcessId
| project Timestamp, DeviceName, AccountName, AccountDomain = AccountDomain, ProcessId, FileName, ProcessCommandLine = cmd, InitiatingProcessFileName, InitiatingProcessCommandLine, MatchedCommand
| union (
DeviceEvents
// | where Timestamp >= ago(30d)
| where isnotempty(ProcessCommandLine) or isnotempty(FileName)
| extend cmd = tostring(ProcessCommandLine), exe = tolower(tostring(FileName))
| where cmd matches regex arp_regex or cmd matches regex netsh_neighbors_regex or cmd matches regex get_netneighbor_regex or exe contains "arp"
| extend MatchedCommand =
iff(cmd matches regex arp_regex, extract(arp_regex, 0, cmd),
iff(cmd matches regex netsh_neighbors_regex, extract(netsh_neighbors_regex, 0, cmd),
iff(cmd matches regex get_netneighbor_regex, extract(get_netneighbor_regex, 0, cmd), exe)))
| summarize arg_max(Timestamp, *) by ReportId, ProcessId
| project Timestamp, DeviceName, AccountName, AccountDomain = AccountDomain, ProcessId, FileName, ProcessCommandLine = cmd, InitiatingProcessFileName, InitiatingProcessCommandLine, MatchedCommand
)
| order by Timestamp desc
| where isnotempty(MatchedCommand) | Correct | 2 | 40.00s | 0.0096 |
gpt-5-mini-medium | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0226 |
gpt-5-nano-high | arp -a | DeviceProcessEvents
| where (InitiatingProcessFileName endswith "arp.exe" or InitiatingProcessFileName endswith "arp" or FileName endswith "arp.exe" or FileName endswith "arp")
| extend ExactCommand = coalesce(InitiatingProcessCommandLine, ProcessCommandLine)
| where ExactCommand contains "arp" and (ExactCommand contains "-a" or ExactCommand contains "-g")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCreationTime, ExactCommand
| sort by TimeGenerated desc | Correct | 3 | 86.50s | 0.0050 |
grok-3-beta | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0836 |
grok-3-mini-beta | arp -a | DeviceProcessEvents
| where ProcessCommandLine has "arp -a"
| project TimeGenerated, DeviceName, AccountName, ProcessCommandLine
| order by TimeGenerated desc | Correct | 1 | 11.12s | 0.0024 |
o1-high | arp -a | DeviceProcessEvents
| where ActionType in~ ("ProcessCreated", "Create", "CreateProcess")
| where ProcessCommandLine has_all ("arp", "-a")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine
| order by TimeGenerated desc | Correct | 2 | 69.52s | 0.3565 |
o1-low | arp -a | DeviceProcessEvents
| where ActionType in ("CreateProcess", "ProcessCreated")
| where isnotempty(ProcessCommandLine)
// Look for typical ways to reveal ARP cache (arp.exe -a, netsh interface ip show neighbors, etc.)
| where tolower(ProcessCommandLine) has_any ("arp -a", "arp /a", "arp -g", "arp /g", "netsh interface ip show neighbors", "netsh interface ip show arpcache", "get-netneighbor")
| project TimeGenerated, DeviceName, AccountDomain, AccountName, FileName, ProcessCommandLine
| order by TimeGenerated desc | Correct | 4 | 77.06s | 0.6596 |
o3-high | arp -a | DeviceProcessEvents
| where FileName =~ "arp.exe" or FileName == "arp"
| where ProcessCommandLine has " -a" or ProcessCommandLine has " -g"
// Optional: focus only on definite process creation events (normally the table already has only those)
// | where ActionType == "ProcessCreated"
| project TimeGenerated,
DeviceName,
DeviceId,
AccountDomain,
AccountName,
ProcessCommandLine,
FolderPath,
SHA256,
InitiatingProcessFileName,
InitiatingProcessCommandLine,
InitiatingProcessAccountName,
ReportId
| order by TimeGenerated asc | Correct | 1 | 26.35s | 0.0201 |
o3-mini-high | arp -a | DeviceProcessEvents
| where tolower(InitiatingProcessCommandLine) contains "arp -a"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine
| order by TimeGenerated desc | Correct | 5 | 57.36s | 0.0485 |
o3-mini-low | arp -a | DeviceProcessEvents
| where isnotempty(InitiatingProcessCommandLine) and (InitiatingProcessCommandLine has "arp")
| where InitiatingProcessCommandLine has_any ("-a", "/a")
| project TimeGenerated, DeviceName, FileName, InitiatingProcessCommandLine, ProcessCommandLine, InitiatingProcessCreationTime
| sort by TimeGenerated desc | Correct | 1 | 80.71s | 0.0232 |
o4-mini-high | No answer provided | No query generated | Incorrect | 5 | 0.00s | 0.0373 |
o4-mini-low | arp -a | DeviceProcessEvents
| where ActionType == "ProcessCreated"
// Match either "arp" or "arp.exe"
| where FileName has_cs "arp"
// Look for the common ARP list switches (case-insensitive): -a, -g, /a, /g
| where ProcessCommandLine matches regex @"(?i)\barp\s+[-/][ag]\b"
| project ProcessCreationTime, DeviceName, InitiatingProcessAccountName, ProcessCommandLine
| sort by ProcessCreationTime asc | Correct | 3 | 95.16s | 0.0209 |