struct ipv4_key_t {
u32 pid;
+ char name[TASK_COMM_LEN];
u32 saddr;
u32 daddr;
u16 lport;
unsigned __int128 saddr;
unsigned __int128 daddr;
u32 pid;
+ char name[TASK_COMM_LEN];
u16 lport;
u16 dport;
u64 __pad__;
if (family == AF_INET) {
struct ipv4_key_t ipv4_key = {.pid = pid};
+ bpf_get_current_comm(&ipv4_key.name, sizeof(ipv4_key.name));
ipv4_key.saddr = sk->__sk_common.skc_rcv_saddr;
ipv4_key.daddr = sk->__sk_common.skc_daddr;
ipv4_key.lport = sk->__sk_common.skc_num;
} else if (family == AF_INET6) {
struct ipv6_key_t ipv6_key = {.pid = pid};
+ bpf_get_current_comm(&ipv6_key.name, sizeof(ipv6_key.name));
bpf_probe_read_kernel(&ipv6_key.saddr, sizeof(ipv6_key.saddr),
&sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
bpf_probe_read_kernel(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
if (family == AF_INET) {
struct ipv4_key_t ipv4_key = {.pid = pid};
+ bpf_get_current_comm(&ipv4_key.name, sizeof(ipv4_key.name));
ipv4_key.saddr = sk->__sk_common.skc_rcv_saddr;
ipv4_key.daddr = sk->__sk_common.skc_daddr;
ipv4_key.lport = sk->__sk_common.skc_num;
} else if (family == AF_INET6) {
struct ipv6_key_t ipv6_key = {.pid = pid};
+ bpf_get_current_comm(&ipv6_key.name, sizeof(ipv6_key.name));
bpf_probe_read_kernel(&ipv6_key.saddr, sizeof(ipv6_key.saddr),
&sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32);
bpf_probe_read_kernel(&ipv6_key.daddr, sizeof(ipv6_key.daddr),
if args.ebpf:
exit()
-TCPSessionKey = namedtuple('TCPSession', ['pid', 'laddr', 'lport', 'daddr', 'dport'])
-
-def pid_to_comm(pid):
- try:
- comm = open("/proc/%d/comm" % pid, "r").read().rstrip()
- return comm
- except IOError:
- return str(pid)
+TCPSessionKey = namedtuple('TCPSession', ['pid', 'name', 'laddr', 'lport', 'daddr', 'dport'])
def get_ipv4_session_key(k):
return TCPSessionKey(pid=k.pid,
+ name=k.name,
laddr=inet_ntop(AF_INET, pack("I", k.saddr)),
lport=k.lport,
daddr=inet_ntop(AF_INET, pack("I", k.daddr)),
def get_ipv6_session_key(k):
return TCPSessionKey(pid=k.pid,
+ name=k.name,
laddr=inet_ntop(AF_INET6, k.saddr),
lport=k.lport,
daddr=inet_ntop(AF_INET6, k.daddr),
key=lambda kv: sum(kv[1]),
reverse=True):
print("%-6d %-12.12s %-21s %-21s %6d %6d" % (k.pid,
- pid_to_comm(k.pid),
+ k.name,
k.laddr + ":" + str(k.lport),
k.daddr + ":" + str(k.dport),
int(recv_bytes / 1024), int(send_bytes / 1024)))
key=lambda kv: sum(kv[1]),
reverse=True):
print("%-6d %-12.12s %-32s %-32s %6d %6d" % (k.pid,
- pid_to_comm(k.pid),
+ k.name,
k.laddr + ":" + str(k.lport),
k.daddr + ":" + str(k.dport),
int(recv_bytes / 1024), int(send_bytes / 1024)))