mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2024-12-22 06:15:31 +00:00
Types to distinct file common for the entire program
This commit is contained in:
parent
aafa1a728a
commit
d5db8c18e5
102
mangle.c
102
mangle.c
@ -1,25 +1,15 @@
|
|||||||
#include <stdlib.h>
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
#include "types.h" // IWYU pragma: keep
|
||||||
#include "mangle.h"
|
#include "mangle.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#ifdef KERNEL_SPACE
|
#ifdef KERNEL_SPACE
|
||||||
#include <linux/printk.h>
|
|
||||||
#include <linux/ip.h>
|
#include <linux/ip.h>
|
||||||
|
|
||||||
#define printf pr_info
|
|
||||||
#define perror pr_err
|
|
||||||
#define lgerror(msg, ret) (pr_err(msg ": %d\n", ret))
|
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdlib.h>
|
||||||
#include <libnetfilter_queue/libnetfilter_queue_ipv4.h>
|
#include <libnetfilter_queue/libnetfilter_queue_ipv4.h>
|
||||||
#include <libnetfilter_queue/libnetfilter_queue_tcp.h>
|
#include <libnetfilter_queue/libnetfilter_queue_tcp.h>
|
||||||
|
|
||||||
typedef uint8_t __u8;
|
|
||||||
typedef uint32_t __u32;
|
|
||||||
typedef uint16_t __u16;
|
|
||||||
|
|
||||||
#define lgerror(msg, ret) __extension__ ({errno = -ret; perror(msg);})
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -365,9 +355,9 @@ void ip4_set_checksum(struct iphdr *iph)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int ip4_payload_split(__u8 *pkt, __u32 buflen,
|
int ip4_payload_split(uint8_t *pkt, uint32_t buflen,
|
||||||
struct iphdr **iph, __u32 *iph_len,
|
struct iphdr **iph, uint32_t *iph_len,
|
||||||
__u8 **payload, __u32 *plen) {
|
uint8_t **payload, uint32_t *plen) {
|
||||||
if (pkt == NULL || buflen < sizeof(struct iphdr)) {
|
if (pkt == NULL || buflen < sizeof(struct iphdr)) {
|
||||||
lgerror("ip4_payload_split: pkt|buflen", -EINVAL);
|
lgerror("ip4_payload_split: pkt|buflen", -EINVAL);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -379,8 +369,8 @@ int ip4_payload_split(__u8 *pkt, __u32 buflen,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
__u32 hdr_len = hdr->ihl * 4;
|
uint32_t hdr_len = hdr->ihl * 4;
|
||||||
__u32 pktlen = ntohs(hdr->tot_len);
|
uint32_t pktlen = ntohs(hdr->tot_len);
|
||||||
if (buflen < pktlen || hdr_len > pktlen) {
|
if (buflen < pktlen || hdr_len > pktlen) {
|
||||||
lgerror("ip4_payload_split: buflen cmp pktlen", -EINVAL);
|
lgerror("ip4_payload_split: buflen cmp pktlen", -EINVAL);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -398,17 +388,17 @@ int ip4_payload_split(__u8 *pkt, __u32 buflen,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tcp4_payload_split(__u8 *pkt, __u32 buflen,
|
int tcp4_payload_split(uint8_t *pkt, uint32_t buflen,
|
||||||
struct iphdr **iph, __u32 *iph_len,
|
struct iphdr **iph, uint32_t *iph_len,
|
||||||
struct tcphdr **tcph, __u32 *tcph_len,
|
struct tcphdr **tcph, uint32_t *tcph_len,
|
||||||
__u8 **payload, __u32 *plen) {
|
uint8_t **payload, uint32_t *plen) {
|
||||||
struct iphdr *hdr;
|
struct iphdr *hdr;
|
||||||
__u32 hdr_len;
|
uint32_t hdr_len;
|
||||||
struct tcphdr *thdr;
|
struct tcphdr *thdr;
|
||||||
__u32 thdr_len;
|
uint32_t thdr_len;
|
||||||
|
|
||||||
__u8 *tcph_pl;
|
uint8_t *tcph_pl;
|
||||||
__u32 tcph_plen;
|
uint32_t tcph_plen;
|
||||||
|
|
||||||
if (ip4_payload_split(pkt, buflen, &hdr, &hdr_len,
|
if (ip4_payload_split(pkt, buflen, &hdr, &hdr_len,
|
||||||
&tcph_pl, &tcph_plen)){
|
&tcph_pl, &tcph_plen)){
|
||||||
@ -441,22 +431,22 @@ int tcp4_payload_split(__u8 *pkt, __u32 buflen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// split packet to two ipv4 fragments.
|
// split packet to two ipv4 fragments.
|
||||||
int ip4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
int ip4_frag(const uint8_t *pkt, uint32_t buflen, uint32_t payload_offset,
|
||||||
__u8 *frag1, __u32 *f1len,
|
uint8_t *frag1, uint32_t *f1len,
|
||||||
__u8 *frag2, __u32 *f2len) {
|
uint8_t *frag2, uint32_t *f2len) {
|
||||||
|
|
||||||
struct iphdr *hdr;
|
struct iphdr *hdr;
|
||||||
const __u8 *payload;
|
const uint8_t *payload;
|
||||||
__u32 plen;
|
uint32_t plen;
|
||||||
__u32 hdr_len;
|
uint32_t hdr_len;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!frag1 || !f1len || !frag2 || !f2len)
|
if (!frag1 || !f1len || !frag2 || !f2len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if ((ret = ip4_payload_split(
|
if ((ret = ip4_payload_split(
|
||||||
(__u8 *)pkt, buflen,
|
(uint8_t *)pkt, buflen,
|
||||||
&hdr, &hdr_len, (__u8 **)&payload, &plen)) < 0) {
|
&hdr, &hdr_len, (uint8_t **)&payload, &plen)) < 0) {
|
||||||
lgerror("ipv4_frag: TCP Header extract error", ret);
|
lgerror("ipv4_frag: TCP Header extract error", ret);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@ -471,11 +461,11 @@ int ip4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
__u32 f1_plen = payload_offset;
|
uint32_t f1_plen = payload_offset;
|
||||||
__u32 f1_dlen = f1_plen + hdr_len;
|
uint32_t f1_dlen = f1_plen + hdr_len;
|
||||||
|
|
||||||
__u32 f2_plen = plen - payload_offset;
|
uint32_t f2_plen = plen - payload_offset;
|
||||||
__u32 f2_dlen = f2_plen + hdr_len;
|
uint32_t f2_dlen = f2_plen + hdr_len;
|
||||||
|
|
||||||
if (*f1len < f1_dlen || *f2len < f2_dlen) {
|
if (*f1len < f1_dlen || *f2len < f2_dlen) {
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -492,8 +482,8 @@ int ip4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
|||||||
struct iphdr *f1_hdr = (void *)frag1;
|
struct iphdr *f1_hdr = (void *)frag1;
|
||||||
struct iphdr *f2_hdr = (void *)frag2;
|
struct iphdr *f2_hdr = (void *)frag2;
|
||||||
|
|
||||||
__u16 f1_frag_off = ntohs(f1_hdr->frag_off);
|
uint16_t f1_frag_off = ntohs(f1_hdr->frag_off);
|
||||||
__u16 f2_frag_off = ntohs(f2_hdr->frag_off);
|
uint16_t f2_frag_off = ntohs(f2_hdr->frag_off);
|
||||||
|
|
||||||
f1_frag_off &= IP_OFFMASK;
|
f1_frag_off &= IP_OFFMASK;
|
||||||
f1_frag_off |= IP_MF;
|
f1_frag_off |= IP_MF;
|
||||||
@ -505,7 +495,7 @@ int ip4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
|||||||
f2_frag_off &= IP_OFFMASK;
|
f2_frag_off &= IP_OFFMASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
f2_frag_off += (__u16)payload_offset / 8;
|
f2_frag_off += (uint16_t)payload_offset / 8;
|
||||||
|
|
||||||
f1_hdr->frag_off = htons(f1_frag_off);
|
f1_hdr->frag_off = htons(f1_frag_off);
|
||||||
f1_hdr->tot_len = htons(f1_dlen);
|
f1_hdr->tot_len = htons(f1_dlen);
|
||||||
@ -524,25 +514,25 @@ int ip4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// split packet to two tcp-on-ipv4 segments.
|
// split packet to two tcp-on-ipv4 segments.
|
||||||
int tcp4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
int tcp4_frag(const uint8_t *pkt, uint32_t buflen, uint32_t payload_offset,
|
||||||
__u8 *seg1, __u32 *s1len,
|
uint8_t *seg1, uint32_t *s1len,
|
||||||
__u8 *seg2, __u32 *s2len) {
|
uint8_t *seg2, uint32_t *s2len) {
|
||||||
|
|
||||||
struct iphdr *hdr;
|
struct iphdr *hdr;
|
||||||
__u32 hdr_len;
|
uint32_t hdr_len;
|
||||||
struct tcphdr *tcph;
|
struct tcphdr *tcph;
|
||||||
__u32 tcph_len;
|
uint32_t tcph_len;
|
||||||
__u32 plen;
|
uint32_t plen;
|
||||||
const __u8 *payload;
|
const uint8_t *payload;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!seg1 || !s1len || !seg2 || !s2len)
|
if (!seg1 || !s1len || !seg2 || !s2len)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if ((ret = tcp4_payload_split((__u8 *)pkt, buflen,
|
if ((ret = tcp4_payload_split((uint8_t *)pkt, buflen,
|
||||||
&hdr, &hdr_len,
|
&hdr, &hdr_len,
|
||||||
&tcph, &tcph_len,
|
&tcph, &tcph_len,
|
||||||
(__u8 **)&payload, &plen)) < 0) {
|
(uint8_t **)&payload, &plen)) < 0) {
|
||||||
lgerror("tcp4_frag: tcp4_payload_split", ret);
|
lgerror("tcp4_frag: tcp4_payload_split", ret);
|
||||||
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
@ -563,11 +553,11 @@ int tcp4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
__u32 s1_plen = payload_offset;
|
uint32_t s1_plen = payload_offset;
|
||||||
__u32 s1_dlen = s1_plen + hdr_len + tcph_len;
|
uint32_t s1_dlen = s1_plen + hdr_len + tcph_len;
|
||||||
|
|
||||||
__u32 s2_plen = plen - payload_offset;
|
uint32_t s2_plen = plen - payload_offset;
|
||||||
__u32 s2_dlen = s2_plen + hdr_len + tcph_len;
|
uint32_t s2_dlen = s2_plen + hdr_len + tcph_len;
|
||||||
|
|
||||||
if (*s1len < s1_dlen || *s2len < s2_dlen)
|
if (*s1len < s1_dlen || *s2len < s2_dlen)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -609,9 +599,9 @@ int tcp4_frag(const __u8 *pkt, __u32 buflen, __u32 payload_offset,
|
|||||||
#define TLS_EXTENSION_SNI 0x0000
|
#define TLS_EXTENSION_SNI 0x0000
|
||||||
#define TLS_EXTENSION_CLIENT_HELLO_ENCRYPTED 0xfe0d
|
#define TLS_EXTENSION_CLIENT_HELLO_ENCRYPTED 0xfe0d
|
||||||
|
|
||||||
typedef __u8 uint8_t;
|
typedef uint8_t uint8_t;
|
||||||
typedef __u32 uint32_t;
|
typedef uint32_t uint32_t;
|
||||||
typedef __u16 uint16_t;
|
typedef uint16_t uint16_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes tls payload of the tcp request.
|
* Processes tls payload of the tcp request.
|
||||||
|
8
mangle.h
8
mangle.h
@ -1,13 +1,10 @@
|
|||||||
#ifndef YU_MANGLE_H
|
#ifndef YU_MANGLE_H
|
||||||
#define YU_MANGLE_H
|
#define YU_MANGLE_H
|
||||||
|
|
||||||
#ifdef KERNEL_SPACE
|
#include "types.h"
|
||||||
#include <linux/types.h>
|
|
||||||
typedef __u8 uint8_t;
|
|
||||||
typedef __u32 uint32_t;
|
|
||||||
|
|
||||||
|
#ifdef KERNEL_SPACE
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/stddef.h>
|
#include <linux/stddef.h>
|
||||||
#include <linux/net.h>
|
#include <linux/net.h>
|
||||||
#include <linux/in.h>
|
#include <linux/in.h>
|
||||||
@ -25,7 +22,6 @@ typedef __u32 uint32_t;
|
|||||||
#define USER_SPACE
|
#define USER_SPACE
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netinet/ip.h>
|
#include <netinet/ip.h>
|
||||||
#include <netinet/tcp.h>
|
#include <netinet/tcp.h>
|
||||||
|
36
types.h
Normal file
36
types.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef TYPES_H
|
||||||
|
#define TYPES_H
|
||||||
|
#include <bits/endian.h>
|
||||||
|
|
||||||
|
#ifdef KERNEL_SCOPE
|
||||||
|
#include <linux/errno.h> // IWYU pragma: export
|
||||||
|
#include <linux/string.h> // IWYU pragma: export
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
typedef __u8 uint8_t;
|
||||||
|
typedef __u16 uint16_t;
|
||||||
|
typedef __u32 uint32_t;
|
||||||
|
typedef __u64 uint64_t;
|
||||||
|
typedef __i8 int8_t;
|
||||||
|
typedef __i16 int16_t;
|
||||||
|
typedef __i32 int32_t;
|
||||||
|
typedef __i64 int64_t;
|
||||||
|
|
||||||
|
#include <linux/printk.h>
|
||||||
|
#define printf pr_info
|
||||||
|
#define perror pr_err
|
||||||
|
#define lgerror(msg, ret) (pr_err(msg ": %d\n", ret))
|
||||||
|
|
||||||
|
#else /* USERSPACE_SCOPE */
|
||||||
|
|
||||||
|
#include <errno.h> // IWYU pragma: export
|
||||||
|
#include <stdint.h> // IWYU pragma: export
|
||||||
|
#include <string.h> // IWYU pragma: export
|
||||||
|
|
||||||
|
#include <stdio.h> // IWYU pragma: export
|
||||||
|
#define lgerror(msg, ret) __extension__ ({errno = -ret; perror(msg);})
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SCOPES */
|
||||||
|
|
||||||
|
#endif /* TYPES_H */
|
Loading…
Reference in New Issue
Block a user