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