Upd project
This commit is contained in:
parent
b45084ec06
commit
212ff48422
5
common.h
5
common.h
@ -2,10 +2,11 @@
|
|||||||
#define H_COMMON
|
#define H_COMMON
|
||||||
|
|
||||||
struct reset {
|
struct reset {
|
||||||
__u8 saddr[4];
|
|
||||||
__u8 daddr[4];
|
|
||||||
__u16 sport;
|
__u16 sport;
|
||||||
__u16 dport;
|
__u16 dport;
|
||||||
|
__u32 saddr;
|
||||||
|
// __u8 saddr[4];
|
||||||
|
// __u8 daddr[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
6
exec.sh
Executable file
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
BIN
load_bpf
Binary file not shown.
15
load_bpf.c
15
load_bpf.c
@ -27,7 +27,7 @@ int main(void){
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
//LIBBPF_OPTS(bpf_map_create_opts, opts, .map_flags = BPF_F_MMAPABLE);
|
//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);
|
printf("Create map: %d\n", map_fd);
|
||||||
|
|
||||||
err = bpf_object__load(obj);
|
err = bpf_object__load(obj);
|
||||||
@ -63,9 +63,16 @@ int main(void){
|
|||||||
int e = bpf_map_lookup_elem(map_fd, &keys, &s_reset);
|
int e = bpf_map_lookup_elem(map_fd, &keys, &s_reset);
|
||||||
if (e == 0){
|
if (e == 0){
|
||||||
//printf("%lld\n", stats);
|
//printf("%lld\n", stats);
|
||||||
struct in_addr *src = (struct in_addr*)&s_reset.saddr;
|
__u8 saddr[4];
|
||||||
struct in_addr *dest = (struct in_addr*)&s_reset.daddr;
|
saddr[0] = s_reset.saddr & 0xFF;
|
||||||
printf("Sport: %d; dport: %d %s %s\n", s_reset.sport, s_reset.dport, inet_ntoa(*src), inet_ntoa(*dest));
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
41
tp_tcp.c
41
tp_tcp.c
@ -27,8 +27,8 @@ struct ctx_reset {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
// __uint(type, BPF_MAP_TYPE_ARRAY);
|
__uint(type, BPF_MAP_TYPE_ARRAY);
|
||||||
__uint(type, BPF_MAP_TYPE_HASH);
|
// __uint(type, BPF_MAP_TYPE_HASH);
|
||||||
__uint(max_entries, 4096);
|
__uint(max_entries, 4096);
|
||||||
__type(key, int);
|
__type(key, int);
|
||||||
__type(value, sizeof(struct reset));
|
__type(value, sizeof(struct reset));
|
||||||
@ -53,25 +53,44 @@ struct {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//SEC("tp/tcp_retransmit_synack")
|
//SEC("tp/tcp_retransmit_synack")
|
||||||
SEC("tracepoint/tcp/tcp_receive_reset")
|
|
||||||
//int tcp_retransmit(struct sock *sk){
|
//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){
|
int tcp_retransmit(struct ctx_reset *ctx){
|
||||||
long long *stats;
|
|
||||||
struct reset *s_reset;
|
struct reset *s_reset;
|
||||||
int keys = 0;
|
int keys = 0;
|
||||||
|
|
||||||
s_reset = bpf_map_lookup_elem(&tcp_reset_stats, &keys);
|
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;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ctx)
|
/*s_reset->saddr[0] = ctx->saddr[0];
|
||||||
return 0;
|
|
||||||
|
|
||||||
//*stats += 1;
|
|
||||||
s_reset->saddr[0] = ctx->saddr[0];
|
|
||||||
s_reset->saddr[1] = ctx->saddr[1];
|
s_reset->saddr[1] = ctx->saddr[1];
|
||||||
s_reset->saddr[2] = ctx->saddr[2];
|
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[0] = ctx->daddr[0];
|
||||||
s_reset->daddr[1] = ctx->daddr[1];
|
s_reset->daddr[1] = ctx->daddr[1];
|
||||||
s_reset->daddr[2] = ctx->daddr[2];
|
s_reset->daddr[2] = ctx->daddr[2];
|
||||||
|
BIN
tp_tcp.o
BIN
tp_tcp.o
Binary file not shown.
Loading…
Reference in New Issue
Block a user