1#include "nfct_get.c"
2
3int main(int argc, char *argv[])
4{
5	struct sockaddr_storage src, dst, ext;
6	char buff[INET6_ADDRSTRLEN];
7
8	if (argc!=5)
9		return 0;
10
11	if (1 != inet_pton(AF_INET, argv[1],
12				&((struct sockaddr_in*)&src)->sin_addr)) {
13		if (1 != inet_pton(AF_INET6, argv[1],
14					&((struct sockaddr_in6*) &src)->sin6_addr)) {
15			perror("bad input param");
16		} else {
17			((struct sockaddr_in6*)(&src))->sin6_port = htons(atoi(argv[2]));
18			src.ss_family = AF_INET6;
19		}
20	} else {
21		((struct sockaddr_in*)(&src))->sin_port = htons(atoi(argv[2]));
22		src.ss_family = AF_INET;
23	}
24
25	if (1 != inet_pton(AF_INET, argv[3],
26				&((struct sockaddr_in*)&dst)->sin_addr)) {
27		if (1 != inet_pton(AF_INET6, argv[3],
28					&((struct sockaddr_in6*) &dst)->sin6_addr)) {
29			perror("bad input param");
30		} else {
31			((struct sockaddr_in6*)(&dst))->sin6_port = htons(atoi(argv[4]));
32			dst.ss_family = AF_INET6;
33		}
34	} else {
35		((struct sockaddr_in*)(&dst))->sin_port = htons(atoi(argv[4]));
36		dst.ss_family = AF_INET;
37	}
38
39	if (get_nat_ext_addr((struct sockaddr*)&src, (struct sockaddr*)&dst,
40			IPPROTO_TCP, &ext)) {
41		printf("Ext address %s:%d\n",
42			inet_ntop(src.ss_family,
43				&((struct sockaddr_in*)&ext)->sin_addr,
44				buff, sizeof(buff)),
45			ntohs(((struct sockaddr_in*)(&ext))->sin_port));
46	} else {
47		printf("no entry\n");
48	}
49	return 0;
50}
51