Upd project

This commit is contained in:
gbucchino 2024-07-08 07:55:39 +02:00
parent b45084ec06
commit 212ff48422
6 changed files with 50 additions and 17 deletions

@ -2,10 +2,11 @@
#define H_COMMON
struct reset {
__u8 saddr[4];
__u8 daddr[4];
__u16 sport;
__u16 dport;
__u32 saddr;
// __u8 saddr[4];
// __u8 daddr[4];
};
#endif

6
exec.sh Executable file

@ -0,0 +1,6 @@
#!/usr/bin/sh
clang-11 -g -O2 -target bpf -c tp_tcp.c -o tp_tcp.o
gcc load_bpf.c -o load_bpf -lbpf
sudo ./load_bpf

BIN
load_bpf

Binary file not shown.

@ -27,7 +27,7 @@ int main(void){
return -1;
}
//LIBBPF_OPTS(bpf_map_create_opts, opts, .map_flags = BPF_F_MMAPABLE);
map_fd = bpf_create_map(BPF_MAP_TYPE_HASH, sizeof(int), sizeof(struct reset), 4096, BPF_ANY);
map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(int), sizeof(struct reset), 4096, BPF_ANY);
printf("Create map: %d\n", map_fd);
err = bpf_object__load(obj);
@ -63,9 +63,16 @@ int main(void){
int e = bpf_map_lookup_elem(map_fd, &keys, &s_reset);
if (e == 0){
//printf("%lld\n", stats);
struct in_addr *src = (struct in_addr*)&s_reset.saddr;
struct in_addr *dest = (struct in_addr*)&s_reset.daddr;
printf("Sport: %d; dport: %d %s %s\n", s_reset.sport, s_reset.dport, inet_ntoa(*src), inet_ntoa(*dest));
__u8 saddr[4];
saddr[0] = s_reset.saddr & 0xFF;
saddr[1] = (s_reset.saddr >> 8) & 0xFF;
saddr[2] = (s_reset.saddr >> 16) & 0xFF;
saddr[3] = (s_reset.saddr >> 24) & 0xFF;
//struct in_addr *src = (struct in_addr*)&s_reset.saddr;
struct in_addr *src = (struct in_addr*)&saddr;
//struct in_addr *dest = (struct in_addr*)&s_reset.daddr;
//printf("Sport: %d; dport: %d %s %s\n", s_reset.sport, s_reset.dport, inet_ntoa(*src), inet_ntoa(*dest));
printf("Sport: %d; dport: %d %s\n", s_reset.sport, s_reset.dport, inet_ntoa(*src));
}
}

@ -27,8 +27,8 @@ struct ctx_reset {
};
struct {
// __uint(type, BPF_MAP_TYPE_ARRAY);
__uint(type, BPF_MAP_TYPE_HASH);
__uint(type, BPF_MAP_TYPE_ARRAY);
// __uint(type, BPF_MAP_TYPE_HASH);
__uint(max_entries, 4096);
__type(key, int);
__type(value, sizeof(struct reset));
@ -53,25 +53,44 @@ struct {
*/
//SEC("tp/tcp_retransmit_synack")
SEC("tracepoint/tcp/tcp_receive_reset")
//int tcp_retransmit(struct sock *sk){
//SEC("tracepoint/tcp/tcp_receive_reset")
SEC("tracepoint/tcp/tcp_send_reset")
int tcp_retransmit(struct ctx_reset *ctx){
long long *stats;
struct reset *s_reset;
int keys = 0;
s_reset = bpf_map_lookup_elem(&tcp_reset_stats, &keys);
if (!s_reset)
if (!s_reset){
bpf_printk("Failed to get the map");
return 0;
}
if (!ctx)
return 0;
//*stats += 1;
s_reset->saddr[0] = ctx->saddr[0];
/*s_reset->saddr[0] = ctx->saddr[0];
s_reset->saddr[1] = ctx->saddr[1];
s_reset->saddr[2] = ctx->saddr[2];
s_reset->saddr[3] = ctx->saddr[3];
s_reset->saddr[3] = ctx->saddr[3];*/
//memcpy(s_reset->saddr, ctx->saddr, 4);
s_reset->saddr = (ctx->saddr[0]) +
(ctx->saddr[1] << 8) +
(ctx->saddr[2] << 16) +
(ctx->saddr[3] << 24);
__u8 saddr[4];
saddr[0] = s_reset->saddr & 0xFF;
saddr[1] = (s_reset->saddr >> 8) & 0xFF;
saddr[2] = (s_reset->saddr >> 16) & 0xFF;
saddr[3] = (s_reset->saddr >> 24) & 0xFF;
bpf_printk("Saddr: %d %d", ctx->saddr[0], ctx->saddr[1]);
bpf_printk("Saddr: %d %d", ctx->saddr[2], ctx->saddr[3]);
bpf_printk("Saddr: %d %d", saddr[0], saddr[1]);
bpf_printk("Saddr: %d %d", saddr[2], saddr[3]);
//bpf_printk("Daddr: %d %d\n", ctx->daddr[0], ctx->daddr[1]);
//bpf_printk("Daddr: %d %d\n", ctx->daddr[2], ctx->daddr[3]);
//bpf_printk("D: %d %d", s_reset->daddr[0], s_reset->daddr[1]);
//if (sizeof(ctx->daddr) == 4)
bpf_printk("%d", sizeof(struct reset));
//memcpy(s_reset->daddr, ctx->daddr, 4);
/*s_reset->daddr[0] = ctx->daddr[0];
s_reset->daddr[1] = ctx->daddr[1];
s_reset->daddr[2] = ctx->daddr[2];

BIN
tp_tcp.o

Binary file not shown.