⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portmapping.cpp

📁 upnpForWindows by microsoft
💻 CPP
字号:
/*************************************************************************** *   Copyright (C) 2006 by taofei   * *   gudu2005@126.com   * *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * *   This program is distributed in the hope that it will be useful,       * *   but WITHOUT ANY WARRANTY; without even the implied warranty of        * *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         * *   GNU General Public License for more details.                          * *                                                                         * *   You should have received a copy of the GNU General Public License     * *   along with this program; if not, write to the                         * *   Free Software Foundation, Inc.,                                       * *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             * ***************************************************************************/#include "upnpnat.h"#include "utils.h"#include <iostream>// 命令行参数 -s|-S 		查看路由器上所有的映射// 	-a|-A  protocal port [protocal port] ......... 增加映射// 	-d|-D  protocal port [protocal port] .........删除映射// 	-h|-H 			帮助//int main ()//{//        UPNPNAT nat;//	nat.init(10,10);//	if(!nat.discovery())//	{//		std::cerr<<nat.get_last_error()<<std::endl;//		system("pause");//		return -1;//	}//	system("pause");	//	//	//}int main (int argc,char * argv[]){	if(argc<=1||strcmp(argv[1],"-h")==0|strcmp(argv[1],"-H")==0)	//show help	{		std::cout<<"本工具实现在支持UPNP的路由器上增加 删除 查看端口映射"<<std::endl;		std::cout<<"用法:-a|-A protocal port [protocal port] [protocal port]... 增加端口映射 "<<std::endl;		std::cout<<"     -d|-D protocal port [protocal port] [protocal port]... 删除端口映射 "<<std::endl;		std::cout<<"     -s|-S                                                  查看路由器上所有的映射"<<std::endl;		std::cout<<"Examples: portmapping -A TCP 10000 UDP 10003    增加TCP/10000 UDP/10003 两个端口映射"<<std::endl;		std::cout<<"          portmapping -D TCP 10000 UDP 10003    删除TCP/10000 UDP/10003 两个端口映射"<<std::endl;		std::cout<<"          portmapping -S                        查看路由器上所有的映射				"<<std::endl;		return 0;	}        UPNPNAT nat;	nat.init(10,10);	//寻找upnp设备 	if(!nat.discovery())	{		std::cerr<<nat.get_last_error()<<std::endl;		return -1;	}	//获得upnp设备描述文件 	if(!nat.get_description())	{		std::cerr<<nat.get_last_error()<<std::endl;		return -1;	}	//解析upnp设备描述文件 	if(!nat.parser_description())	{		std::cerr<<nat.get_last_error()<<std::endl;		return -1;		}	int i;	unsigned int port;		if(strcmp(argv[1],"-a")==0||strcmp(argv[1],"-A")==0)	//add port mapping	{		i=2;		for(;i+1<argc;i=i+2)		{			if(strcmp(argv[i],"UDP")==0||strcmp(argv[i],"udp")==0)			{				if((port=atoi(argv[i+1]))!=0&&port<65536)				{					if(nat.add_port_mapping(port,"UDP"))					{						std::cout<<"成功添加端口映射 UDP/"<<port<<std::endl;						continue;					}					else					{						std::cerr<<"添加端口映射 UDP/"<<port<<"时发生错误.详细信息如下:"<<std::endl;						std::cerr<<nat.get_last_error()<<std::endl;						return -1;					}				}				else				{					std::cerr<<"参数错误:"<<argv[i+1]<<"似乎不是一个合法的端口号."<<std::endl;					return -1;				}			}			if(strcmp(argv[i],"TCP")==0||strcmp(argv[i],"tcp")==0)			{				if((port=atoi(argv[i+1]))!=0&&port<65536)				{					if(nat.add_port_mapping(port,"TCP"))					{						std::cout<<"成功添加端口映射 TCP/"<<port<<std::endl;						continue;					}					else					{						std::cerr<<"添加端口映射 TCP/"<<port<<"时发生错误.详细信息如下:"<<std::endl;						std::cerr<<nat.get_last_error()<<std::endl;						return -1;					}				}				else				{					std::cerr<<"参数错误:"<<argv[i+1]<<"似乎不是一个合法的端口号."<<std::endl;					return -1;				}			}			std::cerr<<"参数错误:"<<argv[i]<<"似乎不是合法的协议类型。(请使用TCP或UDP)"<<std::endl;			return -1;		}		if(i<argc)		//参数个数不匹配		{			std::cerr<<"参数错误:缺少端口号."<<std::endl;			return -1;		}		return 0;			}		if(strcmp(argv[1],"-d")==0||strcmp(argv[1],"-D")==0)	//del port mapping	{		i=2;		for(;i+1<argc;i=i+2)		{			if(strcmp(argv[i],"UDP")==0||strcmp(argv[i],"udp")==0)			{				if((port=atoi(argv[i+1]))!=0)				{					if(nat.del_port_mapping(port,"UDP"))					{						std::cout<<"成功删除端口映射 UDP/"<<port<<std::endl;						continue;					}					else					{						std::cerr<<"删除端口映射 UDP/"<<port<<"时发生错误.详细信息如下:"<<std::endl;						std::cerr<<nat.get_last_error()<<std::endl;						return -1;					}				}				else				{					std::cerr<<"参数错误:"<<argv[i+1]<<"似乎不是一个合法的端口号."<<std::endl;					return -1;				}			}			if(strcmp(argv[i],"TCP")==0||strcmp(argv[i],"tcp")==0)			{				if((port=atoi(argv[i+1]))!=0)				{					if(nat.del_port_mapping(port,"TCP"))					{						std::cout<<"成功删除端口映射 TCP/"<<port<<std::endl;						continue;					}					else					{						std::cerr<<"删除端口映射 TCP/"<<port<<"时发生错误.详细信息如下:"<<std::endl;						std::cerr<<nat.get_last_error()<<std::endl;						return -1;					}				}				else				{					std::cerr<<"参数错误:"<<argv[i+1]<<"似乎不是一个合法的端口号."<<std::endl;					return -1;				}			}			std::cerr<<"参数错误:"<<argv[i]<<"似乎不是合法的协议类型。(请使用TCP或UDP)"<<std::endl;			return -1;		}		if(i<argc)		//参数个数不匹配		{			std::cerr<<"参数错误:缺少端口号."<<std::endl;			return -1;		}		return 0;	}		if(strcmp(argv[1],"-s")==0||strcmp(argv[1],"-S")==0)	//get port mapping infomations	{		if(!nat.get_port_mapping())		{			std::cerr<<"获得端口映射信息时发生错误.详细信息如下:\n";			std::cerr<<nat.get_last_error()<<std::endl;			return -1;		}		return 0;	}	std::cerr<<"参数错误:\""<<argv[1]<<"\"非法."<<std::endl;	return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -