Python实现端口检测的方法


Posted in Python onJuly 24, 2018

一、背景:

在平时工作中有遇到端口检测,查看服务端特定端口是否对外开放,常用nmap,tcping,telnet等,同时也可以利用站长工具等web扫描端口等。

但是在使用站长工具发现:

  • 每次只能输入一个检测的地址;
  • 虽然可以输入多个端口,但是不能指定一个端口范围来进行批量检测;
  • 没有批量任务记录日志等;

Python实现端口检测的方法 

因避免由于局域网检测发起端网络限制而导致的端口检测异常,未使用python-nmap

想通过调用站长工具,实现

  • 单次可多个地址或域名检测
  • 单词可指定端口范围,批量检测
  • 记录日志

二、代码:

2.1 结构

Python实现端口检测的方法 

2.2 代码

github地址

部分代码

#配置文件
#端口检测配置
[port_check_info]
#检测ip地址或域名
#address = baidu.com
#address = 127.0.0.1
address = www.anchnet.com,www.51cto.com,www.baidu.com
#检查的端口,如多个端口使用,隔开,端口范围使用'-'
#ports = 80,8080....
ports = 20-25,80,443,1433,1521,3306,3389,6379,8080,27017
#日志配置
[loginfo]
#日志目录
logdir_name = logdir
#日志文件名称
logfile_name = check_port.log
  def _get_body(self):
    """
    获取address和port
    :return: list
    """
    address_list = self.address_list.split(',')
    port_list = self.port_list.split(',')
    # 处理端口范围,返回range
    range_flag = False
    port_range = None
    content_List_range = []
    for port in port_list:
      if '-' in port:
        range_flag = True
        port_range = range(int(port.split('-')[0]),int(port.split('-')[1])+1)
        port_list.remove(port)
    # 处理总体list
    for add in address_list:
      if range_flag:
        for port in port_range:
          content_List_range.append(add + ':' + str(port))
    # 合并range和普通list
    content_List = [ add+':'+port for add in address_list for port in port_list ]
    content_List_range.extend(content_List)
    return content_List_range
  def run(self):
    """
    进行端口检测
    :return:
    """
    for content in self._get_body():
      content_list = content.split(':')
      body = {
        'host': content_list[0],
        'port': content_list[1],
        'encode': 'tlCHS1u3IgF4sC57m6KOP3Oaj1Y1kfLq'
      }
      try:
        response = requests.post(url=self.url,data=body,headers=self.headers)
        port_status = re.findall("msg:'(.*?)'", response.text)
        if len(port_status) > 0:
          # print('%s,port status is:%s' % (content, port_status))
          self.logoper.info('%s,port status is:%s' % (content, port_status))
        else:
          self.logoper.info('%s,port status is:%s' % (content, port_status))
          # print('Occer error!请输入正确的地址和端口')
      except Exception as e:
        print(e)

三、测试:

3.1 查看检测结果

Python实现端口检测的方法

此处可以查看51cto的8080端口也是开放的。

3.2 查看日志

Python实现端口检测的方法 

四、改进:

  • 后期可以添加异步多进程等来提升效率
  • 可以对比多个站点检测结果,使结果更准确
  • 整合nmap内网也可检测

总结

以上所述是小编给大家介绍的Python实现端口检测的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
Python算法之图的遍历
Nov 16 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
Dec 20 Python
Python WEB应用部署的实现方法
Jan 02 Python
详解Python做一个名片管理系统
Mar 14 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
python中threading和queue库实现多线程编程
Feb 06 Python
Flask框架信号用法实例分析
Jul 24 #Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 #Python
Django中的Model操作表的实现
Jul 24 #Python
Python实现的tcp端口检测操作示例
Jul 24 #Python
python正则表达式之对号入座篇
Jul 24 #Python
Python 字符串与二进制串的相互转换示例
Jul 23 #Python
Python二进制串转换为通用字符串的方法
Jul 23 #Python
You might like
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
php实现文章评论系统
2019/02/18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
2014/07/28 Javascript
JQuery判断radio是否选中并获取选中值的示例代码
2014/10/17 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
nodejs文件夹深层复制功能
2019/09/03 NodeJs
jquery实现手风琴案例
2020/05/04 jQuery
VSCode launch.json配置详细教程
2020/06/18 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
2013/02/17 面试题
大一新生学期自我评价
2014/04/09 职场文书
2014年绿化工作总结
2014/12/09 职场文书
个人事迹材料怎么写
2014/12/30 职场文书
党员承诺书范文2015
2015/04/27 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers