- 论坛徽章:
- 0
|
问题更新下,在各位好心人的帮助下,我自己又尝试写了个
ipt_ME.c
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <linux/udp.h>
#include <linux/icmp.h>
#include <net/icmp.h>
#include <net/ip.h>
#include <net/tcp.h>
#include <net/route.h>
#include <net/dst.h>
#include <linux/netfilter/x_tables.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include "ipt_ME.h"
#ifdef CONFIG_BRIDGE_NETFILTER
#include <linux/netfilter_bridge.h>
#endif
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>");
MODULE_DESCRIPTION("Xtables: packet \"rejection\" target for IPv4");
static unsigned int
reject_tg(struct sk_buff *skb, const struct net_device *in,
const struct net_device *out, unsigned int hooknum,
const struct xt_target *target, const void *targinfo)
{
const struct ipt_me_info *reject = targinfo;
const struct iphdr *oiph;
const struct tcphdr *oth;
struct tcphdr _otcph;
printk("me port %d!!!\n",reject->port);
oiph = ip_hdr (skb);
printk("reject_tg call success!!!\n");
switch (oiph->protocol)
{
case IPPROTO_TCP:
printk ("TCP PACKET!!!\n");
break;
case IPPROTO_UDP:
printk ("UDP PACKET!!!\n");
return NF_DROP;
break;
case IPPROTO_ICMP:
printk ("ICMP PACKET!!!\n");
return NF_DROP;
break;
default:
return NF_DROP;
}
oth = skb_header_pointer (skb, ip_hdrlen (skb), sizeof(_otcph), &_otcph);
if (oth == NULL)
return NF_DROP;
if (oth->urg)
{
printk ("urg ok!!!!!");
return NF_DROP;
}
else
{
printk ("urg ok!!!!!");
printk ("s_port:%d,d_port:%d", oth->source, oth->dest);
}
return NF_ACCEPT;
}
static bool
reject_tg_check(const char *tablename, const void *e_void,
const struct xt_target *target, void *targinfo,
unsigned int hook_mask)
{
const struct ipt_me_info *meinfo = targinfo;
//const struct ipt_entry *e = e_void;
/*if (rejinfo->with == IPT_ICMP_ECHOREPLY) {
printk("ipt_REJECT: ECHOREPLY no longer supported.\n");
return false;
}*/
printk("me port %d!!!\n",meinfo->port);
return true;
}
static struct xt_target reject_tg_reg __read_mostly = {
.name = "REJECT",
.family = AF_INET,
.target = reject_tg,
.targetsize = sizeof(struct ipt_me_info),
//.table = "filter",
.hooks = (1 << NF_INET_LOCAL_IN) | (1 << NF_INET_FORWARD) |
(1 << NF_INET_LOCAL_OUT),
.checkentry = reject_tg_check,
.me = THIS_MODULE,
};
static int __init reject_tg_init(void)
{
return xt_register_target(&reject_tg_reg);
}
static void __exit reject_tg_exit(void)
{
xt_unregister_target(&reject_tg_reg);
}
module_init(reject_tg_init);
module_exit(reject_tg_exit); |
|
|