2012-04-26 14:08:39 +00:00
|
|
|
/* $Id: testiptcrdr.c,v 1.18 2012/04/24 22:41:53 nanard Exp $ */
|
2011-09-28 19:13:20 +00:00
|
|
|
/* MiniUPnP project
|
|
|
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
2012-04-26 14:08:39 +00:00
|
|
|
* (c) 2006-2012 Thomas Bernard
|
2011-09-28 19:13:20 +00:00
|
|
|
* This software is subject to the conditions detailed
|
|
|
|
* in the LICENCE file provided within the distribution */
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include <netinet/in.h>
|
|
|
|
#include <syslog.h>
|
|
|
|
|
2013-07-09 13:36:53 +00:00
|
|
|
#include "iptcrdr.c"
|
2012-04-26 14:08:39 +00:00
|
|
|
#include "../commonrdr.h"
|
2011-09-28 19:13:20 +00:00
|
|
|
|
|
|
|
#ifndef PRIu64
|
|
|
|
#define PRIu64 "llu"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
int
|
|
|
|
main(int argc, char ** argv)
|
|
|
|
{
|
|
|
|
unsigned short eport, iport;
|
|
|
|
const char * iaddr;
|
|
|
|
printf("Usage %s <ext_port> <internal_ip> <internal_port>\n", argv[0]);
|
2012-03-01 01:44:38 +00:00
|
|
|
|
2011-09-28 19:13:20 +00:00
|
|
|
if(argc<4)
|
|
|
|
return -1;
|
|
|
|
openlog("testiptcrdr", LOG_PERROR|LOG_CONS, LOG_LOCAL0);
|
|
|
|
eport = (unsigned short)atoi(argv[1]);
|
|
|
|
iaddr = argv[2];
|
|
|
|
iport = (unsigned short)atoi(argv[3]);
|
|
|
|
printf("trying to redirect port %hu to %s:%hu\n", eport, iaddr, iport);
|
2013-07-09 13:36:53 +00:00
|
|
|
if(addnatrule(IPPROTO_TCP, eport, iaddr, iport, NULL) < 0)
|
2011-09-28 19:13:20 +00:00
|
|
|
return -1;
|
2013-07-09 13:36:53 +00:00
|
|
|
if(add_filter_rule(IPPROTO_TCP, NULL, iaddr, iport) < 0)
|
2011-09-28 19:13:20 +00:00
|
|
|
return -1;
|
|
|
|
/* test */
|
|
|
|
{
|
|
|
|
unsigned short p1, p2;
|
|
|
|
char addr[16];
|
|
|
|
int proto2;
|
|
|
|
char desc[256];
|
2012-04-26 14:08:39 +00:00
|
|
|
char rhost[256];
|
|
|
|
unsigned int timestamp;
|
2011-09-28 19:13:20 +00:00
|
|
|
u_int64_t packets, bytes;
|
2012-04-26 14:08:39 +00:00
|
|
|
|
2011-09-28 19:13:20 +00:00
|
|
|
desc[0] = '\0';
|
2012-04-26 14:08:39 +00:00
|
|
|
if(get_redirect_rule_by_index(0, "", &p1,
|
|
|
|
addr, sizeof(addr), &p2,
|
|
|
|
&proto2, desc, sizeof(desc),
|
|
|
|
rhost, sizeof(rhost),
|
|
|
|
×tamp,
|
2011-09-28 19:13:20 +00:00
|
|
|
&packets, &bytes) < 0)
|
|
|
|
{
|
|
|
|
printf("rule not found\n");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
printf("redirected port %hu to %s:%hu proto %d packets=%" PRIu64 " bytes=%" PRIu64 "\n",
|
|
|
|
p1, addr, p2, proto2, packets, bytes);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
printf("trying to list nat rules :\n");
|
|
|
|
list_redirect_rule(argv[1]);
|
|
|
|
printf("deleting\n");
|
|
|
|
delete_redirect_and_filter_rules(eport, IPPROTO_TCP);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|