3
我在內核模塊中使用netfilter鉤子。我希望能夠捕獲由scapy創建的數據包。Netfilter和Scapy
掛鉤以及通過scapy生成的數據包都在同一臺物理主機上運行。似乎沒有可用的netfilter鉤子能夠捕獲數據包。
我也嘗試從虛擬機內發送相同的數據包,但這也不起作用。
我懷疑問題與環回iterface上的所有內容有關,因爲它全部在同一個盒子上。
我當然可以用兩個物理主機去,但這是不幸的是不可能的現在:(
static unsigned int out_hook(unsigned int hooknum,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *))
{
sock_buff = skb;
if (!sock_buff) {
return NF_ACCEPT;
} else {
ip_header = (struct iphdr *)skb_network_header(sock_buff);
if (!ip_header) {
return NF_ACCEPT;
} else {
if (ip_header->protocol == IPPROTO_TCP) {
th = (struct tcphdr *)(skb_transport_header(sock_buff)+sizeof(struct iphdr));
printk(KERN_INFO "[LOCAL_OUT] %d.%d.%d.%d:%d -> %d.%d.%d.%d:%d\n", ip_header->saddr & 0x000000FF, (ip_header->saddr & 0x0000FF00) >> 8,(ip_header->saddr & 0x00FF0000) >> 16,(ip_header->saddr & 0xFF000000) >> 24, th->source, ip_header->daddr & 0x000000FF, (ip_header->daddr & 0x0000FF00) >> 8,(ip_header->daddr & 0x00FF0000) >> 16,(ip_header->daddr & 0xFF000000) >> 24, th->dest);
unsigned int len = sock_buff->len - sizeof(struct tcphdr) - sizeof(struct iphdr);
printk(KERN_INFO "\t [skbuf->len]=%d", sock_buff->len);
printk(KERN_INFO "\t [skbuf->data_len]=%d", sock_buff->data_len);
return NF_ACCEPT;
} else {
return NF_ACCEPT;
}
}
}
}
以上是鉤。
#!/usr/bin/env python
import sys
sys.path.append('/usr/local/bin')
import time
from threading import Thread
from scapy.all import *
from hashlib import sha1, md5
import random
import crypt
conf.iface='wlan0'
packet = IP(dst="192.168.0.104")/TCP(sport=1234, dport=2222)/Raw("testtest")
send(packet)
以上是發送。 PY
如果您沒有使用AF_LOCAL套接字進行傳輸,則回送沒有任何關係。得到的代碼? – user611775
上面顯示的代碼 – eeknay