Skip to content

Commit 945be2d

Browse files
authored
Merge pull request #2 from sagarbhure/dev
LGTM
2 parents 23dcbc2 + 416c37f commit 945be2d

10 files changed

+1273
-0
lines changed

ebpfshield.c

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#include <linux/sched.h>
2+
#include <linux/socket.h>
3+
#include <linux/net.h>
4+
#include <linux/file.h>
5+
#include <net/sock.h>
6+
#include <uapi/linux/in.h>
7+
8+
BPF_PERF_OUTPUT(events);
9+
10+
struct netevent_t {
11+
u32 pid;
12+
u64 ts;
13+
char comm[TASK_COMM_LEN];
14+
int fd;
15+
int uid;
16+
unsigned short port;
17+
unsigned int address;
18+
int inet_family;
19+
};
20+
21+
extern struct socket *sockfd_lookup(int fd, int *err);
22+
extern unsigned long __fdget(unsigned int fd);
23+
extern unsigned long __fdget_raw(unsigned int fd);
24+
25+
26+
int probe_connect_enter (struct pt_regs *ctx, int sockfd, struct sockaddr* addr, int addrlen) {
27+
struct sockaddr_in* poop = (struct sockaddr_in*) addr;
28+
if (poop->sin_family != AF_INET) {
29+
return 0;
30+
}
31+
32+
//__fdget_raw(sockfd);
33+
//struct socket* test = sockfd_lookup(sockfd, NULL);
34+
struct netevent_t netevent = {};
35+
netevent.pid = bpf_get_current_pid_tgid();
36+
netevent.ts = bpf_ktime_get_ns();
37+
//netevent.fd = sk->__sk_common.skc_family;
38+
netevent.uid = bpf_get_current_uid_gid();
39+
netevent.port = poop->sin_port;
40+
netevent.address = poop->sin_addr.s_addr;
41+
bpf_get_current_comm(&netevent.comm, sizeof(netevent.comm));
42+
events.perf_submit(ctx, &netevent, sizeof(netevent));
43+
44+
return 0;
45+
}
46+
47+
int tcp_v4 (struct pt_regs *ctx, struct sock *sk, struct sockaddr *uaddr, int addr_len) {
48+
struct sockaddr_in* poop = (struct sockaddr_in*) uaddr;
49+
if (poop->sin_family != AF_INET) {
50+
return 0;
51+
}
52+
53+
struct netevent_t netevent = {};
54+
netevent.pid = bpf_get_current_pid_tgid();
55+
netevent.ts = bpf_ktime_get_ns();
56+
netevent.fd = sk->__sk_common.skc_family;
57+
netevent.uid = bpf_get_current_uid_gid();
58+
netevent.port = poop->sin_port;
59+
netevent.address = poop->sin_addr.s_addr;
60+
bpf_get_current_comm(&netevent.comm, sizeof(netevent.comm));
61+
events.perf_submit(ctx, &netevent, sizeof(netevent));
62+
63+
return 0;
64+
}
65+
66+
int udp_v4 (struct pt_regs *ctx, struct sock *sk, struct msghdr *msg, size_t len) {
67+
struct netevent_t netevent = {};
68+
sk = (struct sock *)PT_REGS_PARM1(ctx);
69+
70+
netevent.pid = bpf_get_current_pid_tgid();
71+
netevent.ts = bpf_ktime_get_ns();
72+
netevent.fd = sk->__sk_common.skc_family;
73+
netevent.uid = bpf_get_current_uid_gid();
74+
netevent.port = 0x35;//poop->sin_port;
75+
netevent.address = 0;//poop->sin_addr.s_addr;
76+
strcpy(netevent.comm, "sagar");
77+
// bpf_get_current_comm(&netevent.comm, sizeof(netevent.comm));
78+
events.perf_submit(ctx, &netevent, sizeof(netevent));
79+
80+
return 0;
81+
}
82+

ebpfshield/__init__.py

Whitespace-only changes.
136 Bytes
Binary file not shown.
1.23 KB
Binary file not shown.

ebpfshield/helpers.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
from functools import reduce
3+
4+
class TaggedIpList:
5+
def __init__(self, tag, handle):
6+
self.addresses = []
7+
self.tag = tag
8+
for line in handle:
9+
line = line.strip()
10+
11+
if line and line[0] == "#":
12+
continue
13+
14+
self.addresses.append(self.ip2int(line))
15+
16+
self.addresses = sorted(self.addresses)
17+
18+
def check_membership(self, ip_address):
19+
ip_address = self.ip2int(ip_address)
20+
21+
low = 0
22+
high = len(self.addresses)-1
23+
24+
while high >= low:
25+
midpoint = (low + high)//2
26+
if self.addresses[midpoint] == ip_address:
27+
return True
28+
elif self.addresses[midpoint] > ip_address:
29+
high = midpoint-1
30+
elif self.addresses[midpoint] < ip_address:
31+
low = midpoint+1
32+
33+
return False
34+
35+
def ip2int(self, ip):
36+
return reduce(lambda out, x: (out << 8) + int(x), ip.split('.'), 0)
37+

ip_feeds/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# IP Feeds
2+
3+
By default this is empty. Add new feeds by running `./update_feeds.sh` in the root directory of this project.

0 commit comments

Comments
 (0)