Network Analysis

Deep visibility into firewall sessions, security threats, and top consumers of bandwidth powered by the Core Router API.

@if($networkAnalysisLoading || ($networkAnalysis['lastUpdated'] === null && $networkAnalysis['error'] === null))

Fetching data from Core Router... reload page

@elseif($networkAnalysis['error'])

{{ $networkAnalysis['error'] }}

Ensure the Core Router API credentials are configured in your environment.

@else
@if(($networkAnalysis['connectionCount'] ?? 0) == 0)
No matching connections tracked for this server.
@else
@foreach($this->paginatedConnections as $index => $connection) @php // Use raw bytes value from backend for reliable numeric sorting $bytesForSort = (int)($connection['bytes'] ?? 0); @endphp @endforeach
Direction
Protocol
Source
Destination
State
Traffic
@php $direction = $connection['direction'] ?? '—'; @endphp @if($direction !== '—')
{{ $direction }}
@else — @endif
@php $protocol = $connection['protocol'] ?? '—'; @endphp @if($protocol !== '—')
{{ $protocol }}
@else — @endif
@php $sourceIP = $connection['source'] ?? '—'; $isSourcePublic = $sourceIP !== '—' && $this->checkIsPublicIP($sourceIP); @endphp
{{ $sourceIP }} @if($isSourcePublic)
@endif
@if(isset($connection['source_port'])) {{ $connection['source_port'] }} @endif
@php $destIP = $connection['destination'] ?? '—'; $isDestPublic = $destIP !== '—' && $this->checkIsPublicIP($destIP); @endphp
{{ $destIP }} @if($isDestPublic)
@endif
@if(isset($connection['destination_port'])) {{ $connection['destination_port'] }} @endif
@php $state = $connection['state'] ?? '—'; @endphp @if($state !== '—')
{{ $state }}
@else — @endif
{{ $connection['bytes_human'] ?? '—' }} @if(isset($connection['packets'])) {{ number_format($connection['packets']) }} packets @endif
{{-- Connections Pagination Controls --}} @if(($networkAnalysis['connectionCount'] ?? 0) > 0)
{{-- Records per page selector --}}
per page
{{-- Page info and navigation --}}
Showing {{ (($connectionsCurrentPage - 1) * $connectionsPerPage) + 1 }} - {{ min($connectionsCurrentPage * $connectionsPerPage, $networkAnalysis['connectionCount'] ?? 0) }} of {{ $networkAnalysis['connectionCount'] ?? 0 }} connections
{{-- First page --}} {{-- Previous page --}} {{-- Page numbers --}} @php $connectionsTotalPages = $this->connectionsTotalPages; $startPage = max(1, $connectionsCurrentPage - 2); $endPage = min($connectionsTotalPages, $connectionsCurrentPage + 2); @endphp @if($startPage > 1) @if($startPage > 2) ... @endif @endif @for($i = $startPage; $i <= $endPage; $i++) @endfor @if($endPage < $connectionsTotalPages) @if($endPage < $connectionsTotalPages - 1) ... @endif @endif {{-- Next page --}} {{-- Last page --}}
@endif
@endif
@if(($networkAnalysis['topConnectionCount'] ?? 0) == 0)
No connection data available.
@else
@foreach($this->paginatedTopConnections as $index => $row) @php $endpointIP = $row['endpoint'] ?? '—'; $port = $row['port'] ?? 0; $connections = $row['count'] ?? 0; $bytes = $row['bytes'] ?? 0; $bytesForSort = $bytes; @endphp @endforeach
Endpoint
Port
Connections
Traffic
@php $isEndpointPublic = $endpointIP !== '—' && $this->checkIsPublicIP($endpointIP); @endphp
{{ $endpointIP }} @if($isEndpointPublic)
@endif
@if(isset($row['port']) && $row['port'] !== '—')
{{ $row['port'] }}
@else — @endif
{{ number_format($row['count']) }}
{{ $row['bytes_human'] }} {{ number_format($row['packets']) }} packets
{{-- Top Connections Pagination Controls --}} @if(($networkAnalysis['topConnectionCount'] ?? 0) > 0)
{{-- Records per page selector --}}
per page
{{-- Page info and navigation --}}
Showing {{ (($topConnectionsCurrentPage - 1) * $topConnectionsPerPage) + 1 }} - {{ min($topConnectionsCurrentPage * $topConnectionsPerPage, $networkAnalysis['topConnectionCount'] ?? 0) }} of {{ $networkAnalysis['topConnectionCount'] ?? 0 }} peers
{{-- First page --}} {{-- Previous page --}} {{-- Page numbers --}} @php $topConnectionsTotalPages = $this->topConnectionsTotalPages; $startPage = max(1, $topConnectionsCurrentPage - 2); $endPage = min($topConnectionsTotalPages, $topConnectionsCurrentPage + 2); @endphp @if($startPage > 1) @if($startPage > 2) ... @endif @endif @for($i = $startPage; $i <= $endPage; $i++) @endfor @if($endPage < $topConnectionsTotalPages) @if($endPage < $topConnectionsTotalPages - 1) ... @endif @endif {{-- Next page --}} {{-- Last page --}}
@endif
@endif
@if(($networkAnalysis['topPortCount'] ?? 0) == 0)
No port statistics are available.
@else
@foreach($this->paginatedTopPorts as $index => $row) @php $port = $row['port'] ?? 0; $connections = $row['connections'] ?? 0; $bytes = $row['bytes'] ?? 0; $bytesForSort = $bytes; @endphp @endforeach
Port
Connections
Traffic
{{ $row['port'] }}
{{ number_format($row['connections']) }}
{{ $row['bytes_human'] }} {{ number_format($row['packets']) }} packets
{{-- Top Ports Pagination Controls --}} @if(($networkAnalysis['topPortCount'] ?? 0) > 0)
{{-- Records per page selector --}}
per page
{{-- Page info and navigation --}}
Showing {{ (($topPortsCurrentPage - 1) * $topPortsPerPage) + 1 }} - {{ min($topPortsCurrentPage * $topPortsPerPage, $networkAnalysis['topPortCount'] ?? 0) }} of {{ $networkAnalysis['topPortCount'] ?? 0 }} ports
{{-- First page --}} {{-- Previous page --}} {{-- Page numbers --}} @php $topPortsTotalPages = $this->topPortsTotalPages; $startPage = max(1, $topPortsCurrentPage - 2); $endPage = min($topPortsTotalPages, $topPortsCurrentPage + 2); @endphp @if($startPage > 1) @if($startPage > 2) ... @endif @endif @for($i = $startPage; $i <= $endPage; $i++) @endfor @if($endPage < $topPortsTotalPages) @if($endPage < $topPortsTotalPages - 1) ... @endif @endif {{-- Next page --}} {{-- Last page --}}
@endif
@endif
@if(empty($networkAnalysis['security']))
No security threats detected. All connections appear to be safe.
@else
@foreach($networkAnalysis['security'] as $warning) @php $conn = $warning['connection'] ?? []; @endphp @php $riskLevel = $warning['risk_level'] ?? 'Medium'; $attackType = $warning['attack_type'] ?? 'Unknown Threat'; $riskDescription = $warning['risk_description'] ?? 'Malicious IP detected from blocklist'; $riskBadgeClass = match($riskLevel) { 'Critical' => 'bg-danger/20 text-danger border-danger/30', 'High' => 'bg-warning/20 text-warning border-warning/30', 'Medium' => 'bg-warning/10 text-warning border-warning/20', 'Low' => 'bg-base/10 text-base/70 border-base/20', default => 'bg-warning/10 text-warning border-warning/20', }; @endphp
Security Threat Detected {{ $warning['type'] }} {{ $riskLevel }} Risk {{ $attackType }} @if(isset($warning['quantity']) && $warning['quantity'] > 1) {{ $warning['quantity'] }}x Repeated @endif

{{ $warning['threat'] }} @if(isset($warning['quantity']) && $warning['quantity'] > 1) ({{ $warning['quantity'] }} similar connection{{ $warning['quantity'] > 1 ? 's' : '' }} detected) @endif

@php $threatIP = $warning['ip'] ?? '—'; $isThreatPublic = $threatIP !== '—' && $this->checkIsPublicIP($threatIP); @endphp
IP Address: {{ $threatIP }} @if($isThreatPublic)
@endif
@endforeach
@endif
@endif