- 论坛徽章:
- 0
|
内核模块:
- static unsigned int watch_in(unsigned int hooknum,
- struct sk_buff **skb,
- const struct net_device *in,
- const struct net_device *out,
- int (*okfn)(struct sk_buff *))
- {
- send_to_user(skb);
- return NF_ACCEPT;
- }
- static int send_to_user(struct sk_buff **data)
- {
- struct sk_buff *skb;
- int size;
- unsigned char *old_tail;
- struct nlmsghdr *nlh;
- struct packet_info *packet;
-
- size = NLMSG_SPACE(1518);
- skb = alloc_skb(size, GFP_ATOMIC);
- old_tail = skb->tail;
- nlh = NLMSG_PUT(skb, 0, 0, 1, size-sizeof(*nlh));
- packet = NLMSG_DATA(nlh);
- memset(packet, (*data)->data, (*data)->len);
- nlh->nlmsg_len = skb->tail - old_tail;
- NETLINK_CB(skb).pid = 0;
- NETLINK_CB(skb).dst_pid = 0;
- NETLINK_CB(skb).dst_group = 1;
- netlink_broadcast(vps_sock, skb, 0, 1, GFP_KERNEL);
- printk("send %d.\n",(*data)->len);
- return 0;
- nlmsg_failure: /*若发送失败,则撤销套接字缓存*/
- if(skb)
- kfree_skb(skb);
- return -1;
- }
复制代码
接受模块:
- int main(void)
- {
- struct sockaddr_nl saddr, daddr;
- struct nlmsghdr *nlhdr = NULL;
- struct msghdr msg;
- struct iovec iov;
- int sd;
- int ret = 1;
- struct packet_ret packet_ret;
-
- sd = socket(AF_NETLINK, SOCK_RAW,NETLINK_VPS);
- memset(&saddr, 0, sizeof(saddr));
- memset(&daddr, 0, sizeof(daddr));
- saddr.nl_family = AF_NETLINK;
- saddr.nl_pid = getpid();
- saddr.nl_groups = 1;
- bind(sd, (struct sockaddr*)&saddr, sizeof(saddr));
- nlhdr = (struct nlmsghdr *)malloc(NLMSG_SPACE(MAX_MSGSIZE));
- while (1) {
- memset(nlhdr, 0, NLMSG_SPACE(MAX_MSGSIZE));
- iov.iov_base = (void *)nlhdr;
- iov.iov_len = NLMSG_SPACE(MAX_MSGSIZE);
- msg.msg_name = (void *)&daddr;
- msg.msg_namelen = sizeof(daddr);
- msg.msg_iov = &iov;
- msg.msg_iovlen = 1;
- ret = recvmsg(sd, &msg, 0);
- if (ret == 0) {
- printf("Exit.\n");
- exit(0);
- }
- else if (ret == -1) {
- perror("recvmsg:");
- exit(1);
- }
- print_ip_packet(NLMSG_DATA(nlhdr));
- packet_ret.len = 4;
- packet_ret.flag = 1;
- packet_ret.data = NULL;
- send_to_kernel(sd, &packet_ret);
- }
- close(sd);
- }
复制代码
接收到的数据不正确,刚开始用netlink,还不熟,多谢指导。 |
|