---
name: "tcpconnect-bpfcc"
section: "8"
platform: "linux"
package: "bpfcc-tools"
version: "0.31.0+ds-7"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/tcpconnect-bpfcc"
---

# tcpconnect-bpfcc(8)

Trace TCP active connections (connect()). Uses Linux eBPF/bcc.

## NAME

tcpconnect - Trace TCP active connections (connect()). Uses Linux eBPF/bcc.

## SYNOPSIS

**tcpconnect \[-h\] \[-c\] \[-t\] \[-p PID\] \[-P PORT\] \[-4 \| -6\] \[-L\] \[-u UID\] \[-U\] \[--cgroupmap MAPPATH\] \[--mntnsmap MAPPATH\] \[-d\]**

## DESCRIPTION

This tool traces active TCP connections (eg, via a connect() syscall; accept() are passive connections). This can be useful for general troubleshooting to see what connections are initiated by the local server.

All connection attempts are traced, even if they ultimately fail.

This works by tracing the kernel tcp\_v4\_connect() and tcp\_v6\_connect() functions using dynamic tracing, and will need updating to match any changes to these functions.

When provided with the -d or --dns option, this tool will also correlate connect calls with the most recent DNS query that matches the IP connected. This feature works by tracing the kernel udp\_recvmsg() function to collect DNS responses.

Since this uses BPF, only the root user can use this tool.

## REQUIREMENTS

CONFIG\_BPF and bcc.

If using the -d or --dns option, you must have the dnslib and cachetools python packages installed.  You can install them with pip3 or with apt on Ubuntu 18.04+ using the python3-dnslib and python3-cachetools packages.

## OPTIONS

- \-h

  Print usage message.

- \-t

  Include a timestamp column.

- \-c

  Count connects per src ip and dest ip/port.

- \-p PID

  Trace this process ID only (filtered in-kernel).

- \-P PORT

  Comma-separated list of destination ports to trace (filtered in-kernel).

- \-4

  Trace IPv4 family only.

- \-6

  Trace IPv6 family only.

- \-L

  Include a LPORT column.

- \-U

  Include a UID column.

- \-u UID

  Trace this UID only (filtered in-kernel).

- \--cgroupmap MAPPATH

  Trace cgroups in this BPF map only (filtered in-kernel).

- \--mntnsmap MAPPATH

  Trace mount namespaces in this BPF map only (filtered in-kernel).

- \-d

  Shows the most recent DNS query for the IP address in the connect call. This is likely related to the TCP connection details in the other columns, but is not guaranteed. This feature works by tracing the udp\_recvmsg kernel function and tracking DNS responses received by the server.  It only supports UDP DNS packets up to 512 bytes in length.  The python code keeps a cache of 10k DNS responses in memory for up 24 hours.

  If the time difference in milliseconds between when the system received a DNS response and when a connect syscall was traced using an IP in that DNS response is greater than 100ms, this tool will report this delta after the query. These deltas should be relatively short for most applications.  A long delay between the response and connect could be either anomalous activity or indicate a misattribution between the DNS name requested and the IP that the connect syscall is using.

  The -d option may not be used with the count feature (option -c)

## EXAMPLES

- Trace all active TCP connections:

  \# **tcpconnect**

- Trace all TCP connects, and include timestamps:

  \# **tcpconnect -t**

- Trace all TCP connects, and include most recent matching DNS query for each connected IP

  \# **tcpconnect -d**

- Trace PID 181 only:

  \# **tcpconnect -p 181**

- Trace ports 80 and 81 only:

  \# **tcpconnect -P 80,81**

- Trace IPv4 family only:

  \# **tcpconnect -4**

- Trace IPv6 family only:

  \# **tcpconnect -6**

- Trace all TCP connects, and include LPORT:

  \# **tcpconnect -L**

- Trace all TCP connects, and include UID:

  \# **tcpconnect -U**

- Trace UID 1000 only:

  \# **tcpconnect -u 1000**

- Count connects per src ip and dest ip/port:

  \# **tcpconnect -c**

- Trace a set of cgroups only (see special\_filtering.md from bcc sources for more details):

  \# **tcpconnect --cgroupmap /sys/fs/bpf/test01**

- Trace a set of mount namespaces only (see special\_filtering.md from bcc sources for more details):

  \# **tcpconnect --mntnsmap /sys/fs/bpf/mnt\_ns\_set**

## FIELDS

- TIME(s)

  Time of the call, in seconds.

- UID

  User ID

- PID

  Process ID

- COMM

  Process name

- IP

  IP address family (4 or 6)

- SADDR

  Source IP address.

- LPORT

  Source port

- DADDR

  Destination IP address.

- DPORT

  Destination port

- CONNECTS

  Accumulated active connections since start.

- QUERY

  Shows the most recent DNS query for the IP address in the connect call. This is likely related to the TCP connection details in the other columns, but is not guaranteed.

## OVERHEAD

This traces the kernel tcp\_v\[46\]\_connect functions and prints output for each event. As the rate of this is generally expected to be low (\< 1000/s), the overhead is also expected to be negligible. If you have an application that is calling a high rate of connect()s, such as a proxy server, then test and understand this overhead before use.

If you are using the -d option to track DNS requests, this tool will trace the udp\_recvmsg function and generate an event for any packets from UDP port 53. This event contains up to 512 bytes of the UDP packet payload. Typical applications do not extensively use UDP, so the performance overhead of tracing udp\_recvmsg is expected to be negligible,   However, if you have an application that receives many UDP packets, then you should test and understand the overhead of tracing every received UDP message.  Furthermore, performance overhead of running this tool on a DNS server is expected to be higher than average because all DNS response packets will be copied to userspace.

## SOURCE

This is from bcc.

-

  https://github.com/iovisor/bcc

Also look in the bcc distribution for a companion \_examples.txt file containing example usage, output, and commentary for this tool.

## OS

Linux

## STABILITY

Unstable - in development.

## AUTHOR

Brendan Gregg

## SEE ALSO

tcptracer(8), tcpaccept(8), [funccount(8)](/funccount/8.md), [tcpdump(8)](/tcpdump/8.md)
