- 论坛徽章:
- 0
|
-L里面看到的match的显示顺序就是匹配的顺序吧。
-L从kernel中获得rule的信息,match部分是顺序显示的,也就是kernel里面match就是这个顺序排列的。
而kernel里面判断match与否的动作:
unsigned int
ipt_do_table(struct sk_buff **pskb,
unsigned int hook,
const struct net_device *in,
const struct net_device *out,
struct ipt_table *table,
void *userdata)
{
...
private = table->private;
table_base = (void *)private->entries[smp_processor_id()];
e = get_entry(table_base, private->hook_entry[hook]);
...
do { ----- e是逐条rule
IP_NF_ASSERT(e);
IP_NF_ASSERT(back);
if (ip_packet_match(ip, indev, outdev, &e->ip, offset)) {
struct ipt_entry_target *t;
if (IPT_MATCH_ITERATE(e, do_match,
*pskb, in, out,
offset, &hotdrop) != 0)
goto no_match;
就是按照这个排列顺序。 |
|