#include #include #include #include #include int main(int argc, char **argv) { struct sockaddr_in sin; struct bpf_program bp; struct bpf_insn buf[10]; char rcvbuf[2000]; int i = 0; int fd; fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { perror("socket"); exit(1); } memset(buf, 0, sizeof(buf)); buf[i].code = BPF_LDX|BPF_B|BPF_MSH; buf[i].k = (1<<31) + (1<<29); i++; buf[i].code = BPF_RET; i++; bp.bf_len = i; bp.bf_insns = buf; if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &bp, sizeof(bp)) < 0) { perror("setsockopt"); exit(1); } sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; sin.sin_port = htons(10000); if (bind(fd, (struct sockaddr *)&sin, sizeof(sin)) < 0) { perror("bind"); exit(1); } if (recvfrom(fd, rcvbuf, sizeof(rcvbuf), 0, NULL, 0) < 0) { perror("recvfrom"); exit(1); } }