通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器。

一个简单的端口扫描器

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import * def portScanner(host,port):
try:
s = socket(AF_INET,SOCK_STREAM)
s.connect((host,port))
print('[+] %d open' % port)
s.close()
except:
print('[-] %d close' % port) def main():
setdefaulttimeout(1)
for p in range(1,1024):
portScanner('192.168.0.100',p) if __name__ == '__main__':
main()

说明:

  1. 原理:对不同端口进行TCP连接,根据是否连接成功来判断端口是否打开
  2. AF_INET指定使用IPv4协议,SOCK_STREAM指定使用面向流的TCP协议
  3. connect((host, port)),向指定的IP:端口发起连接
  4. setdefaulttimeout(1),默认超时时间为1秒

多线程版本

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading lock = threading.Lock()
openNum = 0
threads = [] def portScanner(host,port):
global openNum
try:
s = socket(AF_INET,SOCK_STREAM)
s.connect((host,port))
lock.acquire()
openNum+=1
print('[+] %d open' % port)
lock.release()
s.close()
except:
pass def main():
setdefaulttimeout(1)
for p in range(1,1024):
t = threading.Thread(target=portScanner,args=('192.168.0.100',p))
threads.append(t)
t.start() for t in threads:
t.join() print('[*] The scan is complete!')
print('[*] A total of %d open port ' % (openNum)) if __name__ == '__main__':
main()

说明:

  • 使用多线程,1、t = threading.Thread() 2、t.start() 3、t.join()
  • 多线程要保证线程安全(共享变量的一致性)就要对处理共享变量的代码段加锁

最新文章

  1. JFinal 项目 在tomcat下部署
  2. intellij idea Maven 创建项目时出现的一些问题
  3. c#生成MD5字符串
  4. 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange
  5. 用val()获取与设置input的值
  6. Android课程---Activity中保存和恢复用户状态
  7. Integer封装与拆箱
  8. js为DIV动态设置id属性
  9. Unity3D题目,Unity中利用GUI输出九九乘法表
  10. shell练习--用户下载交互检测
  11. @Autowired内部实现原理
  12. hdu 5183
  13. CSS效果:简单的登录框
  14. Ubuntu环境中的Android源代码下载
  15. Scala基础(1)
  16. 字符串的比较【string和字符数组】
  17. java重载方法的二义性
  18. 10个重要的算法C语言实现源代码
  19. 爬虫实战【12】使用cookie登陆豆瓣电影以及获取单个电影的所有短评
  20. 通过tomcat配置访问本机资源

热门文章

  1. Pandas数据统计函数
  2. 决策树算法4:CHAID
  3. html和css常见的一些问题总结
  4. js 中的submit 回调函数
  5. JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景
  6. hive启动出错
  7. Python入门-迭代器和生成器
  8. centos7.3 安装oracle 详细过程
  9. 查域名对应ip,测试端口是否可访问通
  10. python入门基础-介绍、基础语法