00001 #include <stdio.h>
00002 #include <stdlib.h>
00003 #include <string.h>
00004 #include <errno.h>
00005 #include <arpa/inet.h>
00006
00007 #include <libnetfilter_conntrack/libnetfilter_conntrack.h>
00008
00009 static int cb(enum nf_conntrack_msg_type type,
00010 struct nf_expect *exp,
00011 void *data)
00012 {
00013 char buf[1024];
00014
00015 nfexp_snprintf(buf, 1024, exp, NFCT_T_UNKNOWN, NFCT_O_DEFAULT, 0);
00016 printf("%s\n", buf);
00017
00018 return NFCT_CB_CONTINUE;
00019 }
00020
00021 int main(void)
00022 {
00023 int ret;
00024 struct nfct_handle *h;
00025 struct nf_conntrack *master;
00026 struct nf_expect *exp;
00027
00028 master = nfct_new();
00029 if (!master) {
00030 perror("nfct_new");
00031 exit(EXIT_FAILURE);
00032 }
00033
00034 nfct_set_attr_u8(master, ATTR_L3PROTO, AF_INET);
00035 nfct_set_attr_u32(master, ATTR_IPV4_SRC, inet_addr("4.4.4.4"));
00036 nfct_set_attr_u32(master, ATTR_IPV4_DST, inet_addr("5.5.5.5"));
00037
00038 nfct_set_attr_u8(master, ATTR_L4PROTO, IPPROTO_TCP);
00039 nfct_set_attr_u16(master, ATTR_PORT_SRC, htons(10240));
00040 nfct_set_attr_u16(master, ATTR_PORT_DST, htons(10241));
00041
00042 exp = nfexp_new();
00043 if (!exp) {
00044 perror("nfexp_new");
00045 exit(EXIT_FAILURE);
00046 }
00047
00048 nfexp_set_attr(exp, ATTR_EXP_MASTER, master);
00049
00050 h = nfct_open(EXPECT, 0);
00051 if (!h) {
00052 perror("nfct_open");
00053 return -1;
00054 }
00055
00056 nfexp_callback_register(h, NFCT_T_ALL, cb, NULL);
00057 ret = nfexp_query(h, NFCT_Q_GET, exp);
00058
00059 printf("TEST: get expectation ");
00060 if (ret == -1)
00061 printf("(%d)(%s)\n", ret, strerror(errno));
00062 else
00063 printf("(OK)\n");
00064
00065 nfct_close(h);
00066
00067 ret == -1 ? exit(EXIT_FAILURE) : exit(EXIT_SUCCESS);
00068 }