python基于socket函数实现端口扫描


Posted in Python onMay 28, 2020

本文实例为大家分享了python基于socket实现端口扫描的具体代码,供大家参考,具体内容如下

自学Python一段时间,写个端口扫描器练练手。有什么不足之处,请见谅
这是基于socket函数对端口进行端口扫描

所以,首先要导入socket模块

from socket import *

其次,通过正侧表达式来判断输入的是不是IP地址

compile_ip = re.compile(  
    '^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')

这里是核心代码

# -*- coding: utf-8 -*-
from socket import *
import re
from pip._vendor.distlib.compat import raw_input

def portscaner(host,port):         
  try:
    s = socket(AF_INET, SOCK_STREAM) # 实例化socket
    s.connect((host,port))    #对对应主机的对应端口发起连接
    print('主机%s的%s端口处于打开状态'%(host,port))
    s.close()   #关闭连接
    Export_Data(port)   #调用Export_Date
  except Exception as e:
    pass   #利用异常处理,对无法建立连接的端口pass掉


def ChecK_Host(host): #利用正侧表达式匹配host,判断是否符合IP地址的格式  并且输入不为空 
  compile_ip = re.compile(  
    '^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
  if compile_ip.match(host) and len(host)!=0:  #host符合IP地址的格式且不为空值返回True,否则返回False
    return True
  else:
    return False
    

def Export_Data(port):   #导出数据
  port = str(port)     #将port转换为字符串类型
  date = open('Active_Port.txt', 'a') #在文件尾部写入数据,Active_Port.txt,若不存在就新建文件
  date.write(port+'\n')      #将port并行写入文件
  date.close()    #不要忘了关闭文件



def main(host):   #主模块
  if ChecK_Host(host):   #通过ChecK_Host()函数return 的布尔值进行判断输入的IP地址是否有误
    for port in range(1,65536):  #这里可以改成1024
      portscaner(host, port)
    print('\n')
    print('已将结果导出到 Active_Port.txt')
  else:
    print('IP地址无错误,请重新输入!!!')



if __name__ == '__main__':
  print('<' * 12 + '单线程端口扫描器' + '>' * 12)
  host = input('请输入有效的目标IPv4地址:')
  main(host)

raw_input('Press Enter to exit...')    #当脚本执行完后,等待键入Enter回车才退出程序(可有可无,主要是为了封装成exe可执行文件后,执行完程序dos界面不自动退出)

测试结果

可见目的主机的21端口处于开放状态

python基于socket函数实现端口扫描

扫描结束后,将存活的端口写入到Active_Port.txt

python基于socket函数实现端口扫描

这里没有用到多线程,通过循环,一个一个端口进行连接,扫描速度非常慢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
深度剖析使用python抓取网页正文的源码
Jun 11 Python
Python中replace方法实例分析
Aug 20 Python
Python import自定义模块方法
Feb 12 Python
KMP算法精解及其Python版的代码示例
Jun 01 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
Python使用Pickle模块进行数据保存和读取的讲解
Apr 09 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
python datetime处理时间小结
Apr 16 Python
Python读写csv文件流程及异常解决
Oct 20 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
如何用用Python将地址标记在地图上
Feb 07 Python
Python中and和or如何使用
May 28 #Python
Python如何安装第三方模块
May 28 #Python
python使用多线程+socket实现端口扫描
May 28 #Python
Python如何实现定时器功能
May 28 #Python
python实点云分割k-means(sklearn)详解
May 28 #Python
Python脚本实现监听服务器的思路代码详解
May 28 #Python
python中Ansible模块的Playbook的具体使用
May 28 #Python
You might like
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
Jquery实现网页跳转或用命令打开指定网页的解决方法
2013/07/09 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
JavaScript事件委托的技术原理探讨示例
2014/04/17 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
2016/10/27 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
在什么时候需要使用"常引用"
2015/12/31 面试题
几个SQL的面试题
2014/03/08 面试题
软件测试英文面试题
2012/10/14 面试题
银行类自荐信
2014/02/04 职场文书
学习雷锋活动总结
2014/04/29 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
2014年人事工作总结范文
2014/11/19 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
毕业论文致谢信
2015/05/14 职场文书
工作经历证明范本
2015/06/15 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
Java数据结构之堆(优先队列)
2022/05/20 Java/Android