开源项目之多线程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);elseConnectScan();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;}

学习的目的是成熟!~

源码下载

下午某时,天气晴,我在某地,想念你。

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

相关文章:

你感兴趣的文章:

标签云: