1/* $Id: testiptcrdr.c,v 1.18 2012/04/24 22:41:53 nanard Exp $ */ 2/* MiniUPnP project 3 * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ 4 * (c) 2006-2012 Thomas Bernard 5 * This software is subject to the conditions detailed 6 * in the LICENCE file provided within the distribution */ 7 8#include <stdio.h> 9#include <stdlib.h> 10#include <netinet/in.h> 11#include <syslog.h> 12 13#include "iptcrdr.h" 14#include "../commonrdr.h" 15#include "iptcrdr.c" 16 17#ifndef PRIu64 18#define PRIu64 "llu" 19#endif 20 21int 22main(int argc, char ** argv) 23{ 24 unsigned short eport, iport, rport; 25 const char * eaddr, *iaddr, *rhost; 26 printf("Usage %s <ext_ip> <ext_port> <internal_ip> <internal_port> <peer_ip> <peer_port>\n", argv[0]); 27 28 if(argc<6) 29 return -1; 30 openlog("testiptcrdr_peer", LOG_PERROR|LOG_CONS, LOG_LOCAL0); 31 eaddr = argv[1]; 32 eport = (unsigned short)atoi(argv[2]); 33 iaddr = argv[3]; 34 iport = (unsigned short)atoi(argv[4]); 35 rhost = argv[5]; 36 rport = (unsigned short)atoi(argv[6]); 37#if 1 38 printf("trying to redirect port %hu to %s:%hu\n", eport, iaddr, iport); 39 if(addpeernatrule(IPPROTO_TCP, eaddr, eport, iaddr, iport, rhost, rport) < 0) 40 return -1; 41#endif 42 /* test */ 43 { 44 unsigned short p1, p2; 45 char addr[16]; 46 int proto2; 47 char desc[256]; 48 char rhost[256]; 49 unsigned int timestamp; 50 u_int64_t packets, bytes; 51 52 desc[0] = '\0'; 53 if(get_redirect_rule_by_index(0, "", &p1, 54 addr, sizeof(addr), &p2, 55 &proto2, desc, sizeof(desc), 56 rhost, sizeof(rhost), 57 ×tamp, 58 &packets, &bytes) < 0) 59 { 60 printf("rule not found\n"); 61 } 62 else 63 { 64 printf("redirected port %hu to %s:%hu proto %d packets=%" PRIu64 " bytes=%" PRIu64 "\n", 65 p1, addr, p2, proto2, packets, bytes); 66 } 67 } 68 printf("trying to list nat rules :\n"); 69 list_redirect_rule(argv[1]); 70 printf("deleting\n"); 71 delete_redirect_and_filter_rules(eport, IPPROTO_TCP); 72 return 0; 73} 74 75