热门标签 | 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



推荐阅读
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流
    字节流抽象类InputStream和OutputStream是字节流的顶级父类所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStreamInput ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 通过使用 `pandas` 库中的 `scatter_matrix` 函数,可以有效地绘制出多个特征之间的两两关系。该函数不仅能够生成散点图矩阵,还能通过参数如 `frame`、`alpha`、`c`、`figsize` 和 `ax` 等进行自定义设置,以满足不同的可视化需求。此外,`diagonal` 参数允许用户选择对角线上的图表类型,例如直方图或密度图,从而提供更多的数据洞察。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
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社区 版权所有