ËÄ¡¢nf_hook_ops ¹³×ÓµÄ×¢²á
ÔÚfilter±íµÄ³õʼ»¯º¯Êýstatic int __init init(void)ÖгýÁËÓÐÒ»¸önf_register_hookº¯Êý×¢²áÒ»¸ötablesÍ⣬»¹ÓÉnf_register_hookº¯Êý×¢²áÁË3¸öhook
4.1 nf_hook_opsÊý¾Ý½á¹¹ netfilter.h
struct nf_hook_ops
{
struct list_head list; //Á´±í³ÉÔ±
/* User fills in from here down. */
nf_hookfn *hook; //¹³×Óº¯ÊýÖ¸Õë
struct module *owner;
int pf; //ÐÒé´Ø£¬¶ÔÓÚipv4¶øÑÔ£¬ÊÇPF_INET
int hooknum; &n ......
Îå¡¢ ipt_do_table()º¯Êý£¬Êý¾Ý°üµÄ¹ýÂË
5.1 ipt_entry Ïà¹Ø½á¹¹ ip_tables.h
ipt_entry½á¹¹Ç°ÃæÓйýÁË£¬ÔÙ¿´Ò»±é
struct ipt_entry
{
struct ipt_ip ip;
/* ËùҪƥÅäµÄ±¨ÎĵÄIPÍ·ÐÅÏ¢ */
unsigned int nfcache;
/* λÏòÁ¿£¬±êʾ±¾¹æÔò¹ØÐı¨ÎĵÄʲô²¿·Ö£¬ÔÝδʹÓà */
u_int16_t target_offset;
/* targetÇøµÄÆ«ÒÆ£¬Í¨³£targetÇøÎ»ÓÚmatchÇøÖ®ºó£¬¶ømatchÇøÔòÔÚipt_entryµÄĩβ£»
³õʼ»¯Îªsizeof(struct ipt_entry)£¬¼´¼Ù¶¨Ã»ÓÐmatch */
u_int16_t next_offset;
/* ÏÂÒ»Ìõ¹æÔòÏà¶ÔÓÚ±¾¹æÔòµÄÆ«ÒÆ£¬Ò²¼´±¾¹æÔòËùÓÿռäµÄ×ܺͣ¬
³õʼ»¯Îªsizeof(struct ipt_entry)+sizeof(struct ipt_target)£¬¼´Ã»ÓÐmatch */
unsigned int comefrom;
/* λÏòÁ¿£¬±ê¼Çµ÷Óñ¾¹æÔòµÄHOOKºÅ£¬¿ÉÓÃÓÚ¼ì²é¹æÔòµÄÓÐЧÐÔ */
struct ipt_counters counters;
/* ¼Ç¼¸Ã¹æÔò´¦Àí¹ýµÄ±¨ÎÄÊýºÍ±¨ÎÄ×Ü×Ö½ÚÊý */
unsigned char elems[0];
/*target»òÕßÊÇmatchµÄÆðʼλÖà */
}
ipt_ip½á¹¹ ip_tables.h
struct ipt_ip {
struct in_addr src, dst; &nb ......
±¾ÎĽ²ÊöÁËLinuxÃüÁîÐб༿ì½Ý¼üµÄ·½·¨£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
LinuxÃüÁîÐб༿ì½Ý¼ü£º
history ÏÔʾÃüÁîÀúÊ·Áбí
↑(Ctrl+p) ÏÔʾÉÏÒ»ÌõÃüÁî
↓(Ctrl+n) ÏÔʾÏÂÒ»ÌõÃüÁî
!num Ö´ÐÐÃüÁîÀúÊ·ÁбíµÄµÚnumÌõÃüÁî
!! Ö´ÐÐÉÏÒ»ÌõÃüÁî
!?string? Ö´Ðк¬ÓÐstring×Ö·û´®µÄ×îÐÂÃüÁî
Ctrl+r È»ºóÊäÈëÈô¸É×Ö·û£¬¿ªÊ¼ÏòÉÏËÑË÷°üº¬¸Ã×Ö·ûµÄÃüÁ¼ÌÐø°´Ctrl+r£¬ËÑË÷ÉÏÒ»ÌõÆ¥ÅäµÄÃüÁî
Ctrl+s ÓëCtrl+rÀàËÆ,Ö»ÊÇÕýÏò¼ìË÷
Alt+< ÀúÊ·ÁбíµÚÒ»Ïî
Alt+> ÀúÊ·Áбí×îºóÒ»Ïî
Ctrl+f ¹â±êÏòÇ°ÒÆ¶¯Ò»¸ö×Ö·û,Ï൱Óë->
Ctrl+b ¹â±êÏòºóÒÆ¶¯Ò»¸ö×Ö·û,Ï൱Óë<-
Alt+f ¹â±êÏòÇ°ÒÆ¶¯Ò»¸öµ¥´Ê
Alt+b ¹â±êÏòºóÒÆ¶¯Ò»¸öµ¥´Ê
ls !$ Ö´ÐÐÃüÁîls£¬²¢ÒÔÉÏÒ»ÌõÃüÁîµÄ²ÎÊýΪÆä²ÎÊý
Ctrl+a ÒÆ¶¯µ½µ±Ç°ÐеĿªÍ·
Ctrl+e ÒÆ¶¯µ½µ±Ç°ÐеĽáβ
Esc+b ÒÆ¶¯µ½µ±Ç°µ¥´ÊµÄ¿ªÍ·
Esc+f ÒÆ¶¯µ½µ±Ç°µ¥´ÊµÄ½áβ
Ctrl+l ÇåÆÁ
Ctrl+u ¼ôÇÐÃüÁîÐÐÖйâ±êËùÔÚ´¦Ö®Ç°µÄËùÓÐ×Ö·û£¨²»°üÀ¨×ÔÉí£©
Ctrl+k ¼ôÇÐÃüÁîÐÐÖйâ±êËùÔÚ´¦Ö®ºóµÄËùÓÐ×Ö·û£¨°üÀ¨×ÔÉí£©
Ctrl+d ɾ³ý¹â±êËùÔÚ´¦×Ö·û
Ctrl+h ɾ³ý¹â±êËùÔÚ´¦Ç°Ò»¸ö×Ö·û
Ctrl+y Õ³Ìù¸Õ²ÅËùɾ³ýµÄ×Ö·û
Ctrl+w ¼ôÇй ......
תÌù×Ô£ºhttp://alexanderlaw.blog.hexun.com/8968944_d.html
Áù¡¢ À©Õ¹µÄmatch
6.1 do_matchº¯Êý ip_tables.c
do_matchͨ¹ýIPT_MATCH_ITERATEºêÀ´µ÷ÓÃ,
IPT_MATCH_ITERATEÊÇÔÚipt_do_tableº¯ÊýÖе÷Óõĺê
IPT_MATCH_ITERATE(e, do_match,
*pskb, in, out,
offset, &hotdrop)
¶¨ÒåÈçÏ£º
#define IPT_MATCH_ITERATE(e, fn, args...) \
({ \
unsigned int __i; &n ......
תÌù×Ô£ºhttp://alexanderlaw.blog.hexun.com/8968960_d.html
Æß¡¢ target Æ¥Åä
7.1 ipt_targetºÍipt_entry_target½á¹¹ ip_tables.h
ipt_targetºÍipt_match½á¹¹ÀàËÆ£º
struct ipt_target
{
struct list_head list;
const char name[IPT_FUNCTION_MAXNAMELEN];
/* ÔÚʹÓñ¾MatchµÄ¹æÔò×¢Èë±íÖÐ֮ǰµ÷Ó㬽øÐÐÓÐЧÐÔ¼ì²é£¬Èç¹û·µ»Ø0£¬¹æÔò¾Í²»»á¼ÓÈëiptablesÖÐ */
int (*checkentry)(const char *tablename,
const struct ipt_entry *e,
void *targinfo,
unsigned int targinfosize,
  ......
Linux»·¾³½ø³Ì¼äͨÐÅ£¨ËÄ£©
ÐźŵÆ
ÎĵµÑ¡Ïî
<tr
valign="top"><td width="8"><img alt="" height="1" width="8"
src="//www.ibm.com/i/c.gif"/></td><td width="16"><img alt="" width="16"
height="16" src="//www.ibm.com/i/c.gif"/></td><td class="small"
width="122"><p><span class="ast">δÏÔʾÐèÒª JavaScript
µÄÎĵµÑ¡Ïî</span></p></td></tr>
´òÓ¡±¾Ò³
½«´ËÒ³×÷Ϊµç×ÓÓʼþ·¢ËÍ
¼¶±ð£º ³õ¼¶
Ö£ÑåÐË
(mlinux@163.com
)¹ú·À¿Æ´ó¼ÆËã»úѧԺ
2003 Äê 4 ÔÂ 07 ÈÕ
ÐźŵÆÓëÆäËû½ø³Ì¼äͨÐÅ·½Ê½²»´óÏàͬ£¬ËüÖ÷ÒªÌṩ¶Ô½ø³Ì¼ä¹²Ïí×ÊÔ´·ÃÎÊ¿ØÖÆ»úÖÆ¡£Ï൱ÓÚÄÚ´æÖеıêÖ¾£¬½ø³Ì¿ÉÒÔ¸ù¾ÝËüÅж¨ÊÇ·ñÄܹ»·ÃÎÊijЩ¹²Ïí×ÊÔ´£¬Í¬Ê±£¬½ø³ÌÒ²¿ÉÒÔÐ޸ĸñêÖ¾¡£³ýÁËÓÃÓÚ·ÃÎÊ¿ØÖÆÍ⣬»¹¿ÉÓÃÓÚ½ø³Ìͬ²½¡£
Ò»¡¢ÐźŵƸÅÊö
ÐźŵÆÓëÆäËû½ø³Ì¼äͨÐÅ·½Ê½²»´óÏàͬ£¬ËüÖ÷ÒªÌṩ¶Ô½ø³Ì¼ä¹²Ïí×ÊÔ´·ÃÎÊ¿ØÖÆ»úÖÆ¡£Ï൱ÓÚÄÚ´æÖеıêÖ¾£¬ ......