📄 user.c
字号:
#include <unistd.h>#include <stdio.h>#include <linux/types.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <asm/types.h>#include <linux/netlink.h>#include <signal.h>/* public define */#define IMP_U_PID 0#define IMP_K_MSG 1#define IMP_CLOSE 2#define NL_IMP 31struct msg_to_kernel{ struct nlmsghdr hdr;};struct u_packet_info{ struct nlmsghdr hdr; char buf[32];};static int skfd;static void sig_int(int signo){ struct sockaddr_nl kpeer; struct msg_to_kernel message; memset(&kpeer,0,sizeof(kpeer)); kpeer.nl_family = AF_NETLINK; kpeer.nl_pid = 0; kpeer.nl_groups = 0; memset(&message,0,sizeof(message)); message.hdr.nlmsg_len = NLMSG_LENGTH(0); message.hdr.nlmsg_flags = 0; message.hdr.nlmsg_type = IMP_CLOSE; message.hdr.nlmsg_pid = getpid(); sendto(skfd,&message,message.hdr.nlmsg_len,0,(struct sockaddr*)(&kpeer),sizeof(kpeer)); close(skfd); exit(0);}int main(void){ struct sockaddr_nl local; struct sockaddr_nl kpeer; int kpeerlen; struct msg_to_kernel message; struct u_packet_info info; int sendlen = 0; int rcvlen = 0; struct in_addr addr; skfd = socket(PF_NETLINK,SOCK_RAW,NL_IMP); if(skfd < 0) { printf("can't create a netlink socket \n"); exit(0); } memset(&local,0,sizeof(local)); local.nl_family = AF_NETLINK; local.nl_pid = getpid(); local.nl_groups = 0; if(bind(skfd,(struct sockaddr *)&local,sizeof(local)) != 0) { printf("bind() error \n"); return -1; } signal(SIGINT,sig_int); memset(&kpeer,0,sizeof(kpeer)); kpeer.nl_family = AF_NETLINK; kpeer.nl_pid = 0; kpeer.nl_groups = 0; memset(&message,0,sizeof(message)); message.hdr.nlmsg_len = NLMSG_LENGTH(0); message.hdr.nlmsg_flags = 0; message.hdr.nlmsg_type = IMP_U_PID; message.hdr.nlmsg_pid = local.nl_pid; sendto(skfd,&message,message.hdr.nlmsg_len,0,(struct sockaddr*)&kpeer,sizeof(kpeer)); while(1) { kpeerlen = sizeof(struct sockaddr_nl); //rcvlen = recvfrom(skfd, &info, sizeof(struct u_packet_info), 0, (struct sockaddr*)&kpeer, &kpeerlen); rcvlen = recvfrom(skfd, &info, 64, 0, (struct sockaddr*)&kpeer, &kpeerlen); printf("receive len:%d msg:%s\n", rcvlen, info.buf); } return 0; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -