开源项目之多线程TCP端口扫描器

扫描某个IP地址的所有TCP端口,可指定要扫描的线程数以及超时时间设置。可用于扫描某台机器打开了什么端口。

  项目是win32程序,可直接编译通过,效果如图:

 


程序就五个目标文件,通过分析命令行参数进行执行的,没有命令行参数则直接退出。工程如图:


程序的主要源码:

typedef enum
{
	CLOSED = 0,
	OPENED = 1,
	TIMEDOUT = 2
} port_response;

typedef void (*rescb)(port_response resp, unsigned short port);

//网络初始化
void net_init();
//释放网络
void net_end();
//参数
void struct_init(rescb cb, unsigned long wait_time);
//释放资源
void net_uninit();
//网络添加扫描对象
int net_add(unsigned long ip, unsigned short port, unsigned long time);
//网络检查
int net_check(unsigned long time);
//将一个IP转换成一个互联网标准点分格式的字符串
char *net_get_aip(unsigned long ip);
//将一个点分十进制的IP转换成一个长整数型数
unsigned long net_get_iip(char *aip);

int main(int argc, char *argv[])
{
	int PortCount;
	unsigned long time;

	//输出简介
	print_general();

	argc = 2;
	argv[0]="123";
	argv[1]="192.168.1.114";

	if (argc < 2)
	{
		//输出帮助信息
		print_help();
		return 0;
	}

	//分析参数 得到要扫描的端口数量
	PortCount = parse_arguments(argc, argv);

	//输出 根据命令行参数匹配得出的配置信息
	print_config();

	//初始化网络
	net_init();

	//加载文件
	if (options & OPTIONS_RESOLVE_PORTS)
		port_res_file = read_file(PORT_RES_FILENAME);

	total_scanned = 0;
	time = get_time();

	//是异步扫描还是连接扫描
	if (options & OPTIONS_SYN_SCAN)
		SynScan(argv[1], PortCount);
	else
		ConnectScan();

	time = get_time() - time;

	//输出信息
	if (options & OPTIONS_ONFLY_HIDE)
	{
		port_instance *tmp, *pi = oports;
		while (pi)
		{
			tmp = pi->next;
			process_open_port(pi->port);
			free(pi);
			pi = tmp;
		}
	}

	printf("\nTotal ports scanned: %d\nTotal ports open: %d\n", total_scanned, total_opened);
	printf("\n# Scan time: %u.%03u seconds\n\n", (unsigned int)(time / 1000), (unsigned int)(time % 1000));

	if (options & OPTIONS_RESOLVE_PORTS) free(port_res_file);
	if (options & OPTIONS_RESOLVE_MAC) print_MAC();

	net_end();

	return 0;
}


学习的目的是成熟!~

源码下载


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值