Guest User

Untitled

a guest
Apr 12th, 2018
790
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.55 KB | None | 0 0
  1. #include <linux/ip.h>
  2. #include <linux/netfilter/x_tables.h>
  3. #include <linux/netfilter/xt_TPROXY.h>
  4.  
  5. struct xt_target * tproxy = NULL;
  6. static unsigned int simple_tproxy(void *priv,
  7.                 struct sk_buff *skb,
  8.                 const struct nf_hook_state *state)
  9. {
  10.         struct xt_action_param par = {
  11.                 .state    = state,
  12.                 .targinfo = (struct xt_tproxy_target_info_v1 []) {{
  13.                         /* --tproxy-mask=0/0 */
  14.                         .mark_value = 0,
  15.                         .mark_mask  = 0,
  16.                         /* --on-ip=127.0.0.1 */
  17.                         .laddr      = (union nf_inet_addr) { .ip = INADDR_LOOPBACK },
  18.                         /* --on-port=1234    */
  19.                         .lport      = htons(1234),
  20.                 },},
  21.         };
  22.  
  23.         /* -d 192.0.2.0/24 -p tcp */
  24.         if ((ipv4_is_test_192(ip_hdr(skb)->daddr)
  25.              && ip_hdr(skb)->protocol == IPPROTO_TCP))
  26.                 return tproxy->target(skb, &par);
  27.  
  28.         return NF_ACCEPT;
  29. }
  30.  
  31. static struct nf_hook_ops tproxy_ops __read_mostly = {
  32.         .hook           = simple_tproxy,
  33.         .pf             = NFPROTO_IPV4,
  34.         .hooknum        = NF_INET_PRE_ROUTING,
  35.         .priority       = (NF_IP_PRI_MANGLE+1), /* after normal mangle matches */
  36. };
  37.  
  38. static int __init simple_tproxy_init(void)
  39. {
  40.         tproxy = xt_request_find_target(NFPROTO_IPV4, "TPROXY", 1);
  41.         if (tproxy)
  42.                 return nf_register_hook(&tproxy_ops);
  43.  
  44.         return 0;
  45. }
  46.  
  47. module_init(simple_tproxy_init);
Advertisement
Add Comment
Please, Sign In to add comment