热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

接收端口数据_扫描器篇(九)之利用pythonsocket编写端口扫描器

前言之前在编写端口扫描的代码时都是使用TCPUDP协议,但是看了很多的代码都是用socket来完成的,所以就来学习一下socket编程什么是socket

前言

之前在编写端口扫描的代码时都是使用TCP/UDP协议,

但是看了很多的代码都是用socket来完成的,所以就

来学习一下socket编程

什么是socket

网络中的两台主机之间进行通信,本质上是主机中所

运行的进程之间的通信,两个进程如果需要进行通信

,最基本的前提是每一个进程要有一个唯一的标识。

在本地进程通信中可以使用PID来唯一标识一个程,

但PID在 本地是唯一,可以用 "IP地+ 协议+端口号"

来组成唯一标识的网络进程,这就是socket

无论使用何种网络协议,最本质上都是在进行数据

的收发,发和收,这两个动作就是socket处理数据

的主要方式

socket的工作流程

socket 采用C/S 模式,分为服务端和客户端

服务端数据处理流程

创建socket -> 绑定到地址和端口 -> 等待连接 -> 开始通信-> 关闭连接

客户端数据处理流程

创建socket -> 等待连接 -> 开始通信-> 关闭连接

客户端没有绑定地址和端口,是由于客户端进程采用的是随机端口,当客户端要去连接目标时,会由系统自定分配一个端口号和自身ip地址去组合

实现端口扫描原理

通过与目标端口进行socket连接,如果能连接的上则端口为开放,反之就是关闭。

1

代码部分

扫描模块

功能

与目标主机端口创建socket连接

1

判断是否能够连接

1

输出开放端口

1

def connect(ip,port):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 实例化socket类

try:

s.connect((ip,int(port)))# 连接目标主机,能连接的上即端口开放

time.sleep(0.1)

print(ip,port,"is open")

except:

pass# 连接不上直接放弃

finally:

s.close()# 不管是否能连接目标主机都关闭连接

主函数

功能

接收用户输入的参数

1

扫描单个ip

1

扫描整个网段

1

def main():

parser = OptionParser("Usage:-i -p -n network")# 输出帮助信息

parser.add_option("-i","--host",type="string",dest="tgtIP",help="specify target ip")# 接收ip参数

parser.add_option("-p",'--port',type='string',dest='tgtPort',help="specify target port")# 接收端口参数

parser.add_option('-n','--network',type='string',dest='tgtNetwork',help='speify tartget segment') # 接收网段参数

options, args = parser.parse_args()# 实例化对象输入的参数

tgtip = options.tgtIP

tgtnetwork = options.tgtNetwork

tgtport = options.tgtPort

if tgtip is None and tgtnetwork is None:# 判断用户是否输入参数

print(parser.usage)

sys.exit()

if tgtip:

port = tgtport.split(",")# 将端口以逗号为分隔符转换成列表

for p in port:#遍历列表获取单个端口

connect(tgtip,p)

if tgtnetwork:

for i in range(1, 255):

port = tgtport.split(",")# 将端口以逗号为分隔符转换成列表

prefix = tgtnetwork.split(".")[0] + '.' + tgtnetwork.split(".")[1] + '.' + tgtnetwork.split(".")[2] + '.'# 通过切片的方式获取网段地址前缀

ip = prefix + str(i)# 与ip地址前缀向结合构造网段扫描所需ip

for p in port:

t = Thread(target=connect,args=(ip, p))# 调用多线程去扫描

t.start()

time.sleep(0.1)

整体代码

import socket

import time

import sys

from optparse import OptionParser

from threading import Thread

def connect(ip,port):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 实例化socket类

try:

s.connect((ip,int(port)))# 连接目标主机,能连接的上即端口开放

time.sleep(0.1)

print(ip,port,"is open")

except:

pass# 连接不上直接停止

finally:

s.close()# 不管是否能连接目标主机都关闭连接

def main():

parser = OptionParser("Usage:-i -p -n network")# 输出帮助信息

parser.add_option("-i","--host",type="string",dest="tgtIP",help="specify target ip")# 接收ip参数

parser.add_option("-p",'--port',type='string',dest='tgtPort',help="specify target port")# 接收端口参数

parser.add_option('-n','--network',type='string',dest='tgtNetwork',help='speify tartget segment') # 接收网段参数

options, args = parser.parse_args()# 实例化对象输入的参数

tgtip = options.tgtIP

tgtnetwork = options.tgtNetwork

tgtport = options.tgtPort

if tgtip is None and tgtnetwork is None:# 判断用户是否输入参数

print(parser.usage)

sys.exit()

if tgtip:

port = tgtport.split(",")# 将端口以逗号为分隔符转换成列表

for p in port:#遍历列表获取单个端口

connect(tgtip,p)

if tgtnetwork:

for i in range(1, 255):

port = tgtport.split(",")# 将端口以逗号为分隔符转换成列表

prefix = tgtnetwork.split(".")[0] + '.' + tgtnetwork.split(".")[1] + '.' + tgtnetwork.split(".")[2] + '.'# 通过切片的方式获取网段地址前缀

ip = prefix + str(i)# 与ip地址前缀向结合构造网段扫描所需ip

for p in port:

t = Thread(target=connect,args=(ip, p))# 调用多线程去扫描

t.start()

time.sleep(0.1)

if __name__ == '__main__':

main()

运行效果

fbc611c6196dbe20219e8e63a6ec8aab.png



推荐阅读
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 流数据流和IO流的使用及应用
    本文介绍了流数据流和IO流的基本概念和用法,包括输入流、输出流、字节流、字符流、缓冲区等。同时还介绍了异常处理和常用的流类,如FileReader、FileWriter、FileInputStream、FileOutputStream、OutputStreamWriter、InputStreamReader、BufferedReader、BufferedWriter等。此外,还介绍了系统流和标准流的使用。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
author-avatar
dghghjkk_952
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有