When examining network connections using netstat
on modern systems, you might encounter entries like:
TCP [::]:8010 computername LISTENING
This notation represents IPv6 addressing syntax where:
[::]
is the IPv6 equivalent of0.0.0.0
in IPv4 (all available interfaces)- The colon-separated format is standard IPv6 notation
- Square brackets disambiguate the address from the port number
IPv6 uses 128-bit addresses represented as eight groups of four hexadecimal digits:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Special cases:
::1
- IPv6 loopback (equivalent to 127.0.0.1)::
- Unspecified address/all interfaces::ffff:192.168.1.1
- IPv4-mapped IPv6 address
When you see [::]:port
in netstat, it means:
- Your application is listening on all available network interfaces
- The service supports IPv6 connections (either natively or through dual-stack)
Here's how different languages handle this:
Python Example
import socket
# IPv6 dual-stack server
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0)
s.bind(('::', 8080)) # Listen on all interfaces
s.listen(1)
C Example
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int sockfd = socket(AF_INET6, SOCK_STREAM, 0);
struct sockaddr_in6 addr = {0};
addr.sin6_family = AF_INET6;
addr.sin6_addr = in6addr_any; // Equivalent to ::
addr.sin6_port = htons(8080);
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
listen(sockfd, 5);
return 0;
}
To identify all listening IPv6 sockets:
# Linux/Unix
netstat -tulnp | grep -E '$$::$$|IPv6'
# Windows
netstat -ano | findstr LISTENING | findstr "$$::$$"
Remember that square brackets are required in IPv6 URLs:
http://[2001:db8::1]:8080/
When examining network connections using netstat
on modern systems, you might encounter entries like:
TCP [::]:8010 computername LISTENING
This notation represents an IPv6 address listening on port 8010. The [::]
is actually shorthand for the IPv6 loopback address, equivalent to 127.0.0.1
in IPv4.
IPv6 addresses use hexadecimal notation and colons as separators. The double colon ::
is a special notation that represents consecutive zero fields:
Full IPv6 loopback: 0000:0000:0000:0000:0000:0000:0000:0001
Compressed form: ::1
All zeros: ::
When you see [::]
in square brackets, it indicates the unspecified address (all zeros) for the listening interface.
When your application shows [::]:port
in netstat output, it means your service is:
- Listening on all available network interfaces (IPv6)
- Accepting connections from any IPv6-capable client
- Potentially also accepting IPv4 connections if IPv6-mapped addresses are enabled
Here's how different bindings appear in various programming languages:
Python example:
import socket
# Bind to all IPv6 addresses
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('::', 8080)) # Will show as [::]:8080 in netstat
# Bind to IPv6 loopback only
s = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
s.bind(('::1', 8080)) # Will show as [::1]:8080
C++ example:
#include <sys/socket.h>
#include <netinet/in.h>
int main() {
int sockfd = socket(AF_INET6, SOCK_STREAM, 0);
struct sockaddr_in6 addr;
memset(&addr, 0, sizeof(addr));
addr.sin6_family = AF_INET6;
addr.sin6_port = htons(8080);
addr.sin6_addr = in6addr_any; // Will bind to [::]
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
return 0;
}
If you're having issues with services binding to [::]
:
- Check if IPv6 is enabled in your OS
- Verify if your application specifically requests IPv6 binding
- Test connectivity using both IPv4 and IPv6 clients
- Use
netstat -a -n -p tcp -f inet6
(on BSD/macOS) for IPv6-specific output
Binding to [::]
means your service is available on all network interfaces. For security:
- Consider binding to specific interfaces when possible
- Use firewall rules to restrict access
- For local-only services, prefer
::1
(IPv6 loopback) or127.0.0.1