python基于socket函数实现端口扫描
作者:心淚 发布时间:2022-02-06 09:22:37
标签:python,socket,端口扫描
本文实例为大家分享了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端口处于开放状态
扫描结束后,将存活的端口写入到Active_Port.txt
这里没有用到多线程,通过循环,一个一个端口进行连接,扫描速度非常慢。
来源:https://blog.csdn.net/coloson/article/details/88959755
0
投稿
猜你喜欢
- go简单代码反汇编用简单的代码用以分析go的调用约定及多返回值的返回方式。package mainfunc vals(c, d int) (
- 1、实现 __getitem__(self)class Library(object): def __init__(self):
- 在单个HTML元素上利用CSS2.1实现拥有3张背景图片和2张内容图效果,或者多重边框的效果。这种渐进增强的方式适用于所有支持CSS2.1伪
- 一、日期类型:对于SQL Server 2008 来说(因为2000甚至2005已经稍微有被淘汰的迹象,所以在此不作过多说明,加上自己工作使
- 1、epochKeras官方文档中给出的解释是:“简单说,epochs指的就是训练过程接中数据将被“轮”多少次”(1)释义:训练过程中当一个
- 一:操作redis1:redis拓展安装composer require predis/predis或者你也可以通过 PECL 安装&nbs
- 今天我们来学习用 Web 标准的方法来制作 Google 首页(中文)。Google 首页一直是用 table 布局的。我们把 Google
- 下面我们学习if语句,输入下面的代码,确保能够正确运行。people = 20 cats = 30 dogs = 15 if people
- Flask 是一个 Python 实现的 Web 开发微框架。这篇文章是一个讲述如何用它实现传送视频数据流的详细教程。我敢肯定,现在你已经知
- String Types(字符串类型)字符串类型Mysql支持多种字符串类型的变体。 这些数据类型在4.1和5.0版本中有较大的变化, 这使
- 下面代码写的是js验证检查输入的字符是否是全角的函数:效果演示:<script> function i
- 当管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。但实际上并非如此。在这里,我们列出了一些对于SQL Serv
- 在部署一套内网测试环境时,频繁宕机,开机后不断的吃内存,重启apache之后内存占用会不停的上涨,直到swap用完,直到死机,由于是内网环境
- 前言本文给大家详细介绍了解决php-fpm.service not found问题的相关内容,文中介绍的非常详细,下面来一起看看详细的介绍:
- 一般写ASP PHP代码的朋友都估计是采用直接操作SQL的吧~ 看以下的代码 <% dim conn,rs&nbs
- 1 什么是注释注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释
- 1. 首先 进入cmd, 输入python,看python是否安装成功说明python安装,没有问题2. 修改注册表第一步window +
- 首先看一下目标的验证形态是什么样子的是一种通过验证推理的验证方式,用来防人机破解的确是很有效果,但是,But,这里面已经会有一些破绽,比如:
- 本人非计算机,亦非心理学,或者交互设计,更非设计专业出身,因此什么都是半桶水。即使如此,依然靠着兴趣寻找乐趣。对于设计,爱之,但没有受过系统
- 2天内的现实new文字 <%if DateDiff("d",rs("date"),date()