저는 리눅스 용 이더넷 네트워크 드라이버를 작성하고 있습니다. 나는 패킷을 받고 편집하고 다시 보내고 싶다. packet_interceptor
함수에서 패킷을 편집하는 방법을 알고 있지만 수신 패킷을이 함수에 어떻게 놓을 수 있습니까 ??net_dev_add() API를 사용하여 Linux 패킷을 필터링하고 차단하는 방법은 무엇입니까?
#include <linux/netdevice.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <net/sock.h>
struct packet_type my_proto;
int packet_interceptor(struct sk_buff *skb,
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev) {
// I dont want certain packets go to upper in net_devices for further processing.
// How can I drop sk_buff here?!
return 0;
}
static int hello_init(void) {
printk(KERN_INFO "Hello, world!\n");
my_proto.type = htons(ETH_P_ALL);
my_proto.dev = NULL;
my_proto.func = packet_interceptor;
dev_add_pack(&my_proto);
return 0;
}
static void hello_exit(void) {
dev_remove_pack(&my_proto);
printk(KERN_INFO "Bye, world\n");
}
module_init(hello_init);
module_exit(hello_exit);
내 솔루션으로 테스트 해 보았습니까? – Atle
안녕하세요, 요즘에는 컴퓨터에 문제가 있습니다. 답장을 보내 주셔서 감사 드리며, PC를 부팅하자마자 테스트 해 보겠습니다. D. 하지만 나는이 해결책을 시험했지만, 그것이 효과가 없다는 것을 당신에게 묻는다. 나는 그것을 다시 트레이닝 할 것이다. –