1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#include <errno.h> 5#include <arpa/inet.h> 6 7#include <libnetfilter_conntrack/libnetfilter_conntrack.h> 8 9static int cb(enum nf_conntrack_msg_type type, 10 struct nf_expect *exp, 11 void *data) 12{ 13 char buf[1024]; 14 15 nfexp_snprintf(buf, 1024, exp, NFCT_T_UNKNOWN, NFCT_O_DEFAULT, 0); 16 printf("%s\n", buf); 17 18 return NFCT_CB_CONTINUE; 19} 20 21int main(void) 22{ 23 int ret; 24 struct nfct_handle *h; 25 struct nf_conntrack *master; 26 struct nf_expect *exp; 27 28 master = nfct_new(); 29 if (!master) { 30 perror("nfct_new"); 31 exit(EXIT_FAILURE); 32 } 33 34 nfct_set_attr_u8(master, ATTR_L3PROTO, AF_INET); 35 nfct_set_attr_u32(master, ATTR_IPV4_SRC, inet_addr("1.1.1.1")); 36 nfct_set_attr_u32(master, ATTR_IPV4_DST, inet_addr("2.2.2.2")); 37 38 nfct_set_attr_u8(master, ATTR_L4PROTO, IPPROTO_TCP); 39 nfct_set_attr_u16(master, ATTR_PORT_SRC, htons(10240)); 40 nfct_set_attr_u16(master, ATTR_PORT_DST, htons(10241)); 41 42 exp = nfexp_new(); 43 if (!exp) { 44 perror("nfexp_new"); 45 nfct_destroy(master); 46 exit(EXIT_FAILURE); 47 } 48 49 nfexp_set_attr(exp, ATTR_EXP_MASTER, master); 50 51 h = nfct_open(EXPECT, 0); 52 if (!h) { 53 perror("nfct_open"); 54 nfct_destroy(master); 55 return -1; 56 } 57 58 nfexp_callback_register(h, NFCT_T_ALL, cb, NULL); 59 ret = nfexp_query(h, NFCT_Q_GET, exp); 60 61 printf("TEST: get expectation "); 62 if (ret == -1) 63 printf("(%d)(%s)\n", ret, strerror(errno)); 64 else 65 printf("(OK)\n"); 66 67 nfct_close(h); 68 69 nfct_destroy(master); 70 71 ret == -1 ? exit(EXIT_FAILURE) : exit(EXIT_SUCCESS); 72} 73