Nmap 源码学习二 整体架构
2015-06-20 09:05
573 查看
目录功能:
docs :相关文档libdnet-stripped :开源网络接口库
liblinear:开源大型线性分类库
liblua:开源Lua脚本语言库
libnetutil:基本的网络函数
libpcap:开源抓包库
libpcre:开源正则表达式库
macosx:xcode项目文件
mswin32:vs项目文件
nbase:Nmap封装的基础使用函数库
ncat:netcat网络工具,由Nmap实现
ndiff:比较Nmap扫描结果的实用命令
nmap-update:负责Nmap更新操作
nping:Nmap项目组实现的新版的Hping,探测与构建包
nselib:Nmap的Lua脚本
nsock:Nmap实现的并行的SocketEvent处理库
scripts:Nmap提供常用的扫描检查的lua脚本
todo:开发任务
zenmap:python的图形界面程序
主体程序逻辑
入口程序在main.cc,主要功能检查环境变量NMAP_ARGS
检查有没有–resume参数
判断是resume之前扫描,还是新请求
然后是根据传入参数去调用 nmap.cc的nmap_main()函数。下面是精简后的源码:
int main(int argc, char *argv[]) { char command[2048]; int myargc; char **myargv = NULL; char *cptr; int ret; int i; set_program_name(argv[0]); if ((cptr = getenv("NMAP_ARGS"))) { if (Snprintf(command, sizeof(command), "nmap %s", cptr) >= (int) sizeof(command)) { error("Warning: NMAP_ARGS variable is too long, truncated"); } /* copy rest of command-line arguments */ for (i = 1; i < argc && strlen(command) + strlen(argv[i]) + 1 < sizeof(command); i++) { strcat(command, " "); strcat(command, argv[i]); } myargc = arg_parse(command, &myargv); if (myargc < 1) { fatal("NMAP_ARGS variable could not be parsed"); } ret = nmap_main(myargc, myargv); arg_parse_free(myargv); return ret; } if (argc == 3 && strcmp("--resume", argv[1]) == 0) { if (gather_logfile_resumption_state(argv[2], &myargc, &myargv) == -1) { fatal("Cannot resume from (supposed) log file %s", argv[2]); } return nmap_main(myargc, myargv); } return nmap_main(argc, argv); }
然后程序教育nmap_main().
nmap_main里,表面看起来扫描的循环是从2065行开始:
for (targetno = 0; targetno < Targets.size(); targetno++) {
currenths = Targets[targetno];
前后的代码都比较多,下次再抽时间细致分析。
这里引用一个别人做的流程图:
引用网址:
http://blog.csdn.net/wang_walfred/article/details/44910189
相关文章推荐
- 换主页轮播的主题图片(1)---轻开电子商务系统(企业入门级B2C网站)
- PHP网站安装程序的原理及代码
- java架构解密——用接口改造AOP
- 学习有用的网站
- hadoop-ha QJM架构应用故障总结
- hadoop-ha QJM 架构部署
- 做了一个个人网站
- Bat - 通过adb测试浏览器访问网站消耗的流量
- 高可用集群之heartbeat基于crm进行资源管理(二)
- MyBatis学习门户网站(一)
- Windows2003发布MVC4网站
- 简单操作sql语句-提升我们工作效率(网站关键词替换sql语句)
- 编程学习网站
- 通过PHP自带的$_SERVER判断 手机访问网站自动跳转到手机版
- JVM原理、架构—整体架构
- 网站权重分析方式与seo重要性
- 大型网站的灵魂——性能
- 云架构指挥调度平台技术方案建议书
- 云智慧发布电商618网站性能监测报告
- 可扩展Web架构与分布式系统