Python做一个扫描局域网端口的程序

背景

没啥背景,因为之前上课有用到一些的扫描端口的工具,都挺完美的了,但是想深入了解实现的原理。同时也希望可以有自己用的一些脚本。因此就有了写这个程序的想法咯。

一、思路

找端口,首先要像端口发送连接吧,成功跟失败返回结果我们不就清楚这个端口是否开放了吗。ok,python的socket模块完美的解决了这个问题。总结思路:发起连接->成功->打印端口

二、实现

不多bb啦,直接甩代码:

import socket      
import time
import threading

allport = (allp for allp in range(65536))   #所有端口集 端口相关功能信息参考https://www.cnblogs.com/cctest/p/9111506.html
commonports = (7,9,13,21,22,25,37,53,79,80,88,106,110,113,119,135,139,143,179,199,389,427,443,444,
               465,513,514,543,548,554,587,631,646,873,990,993,995,1025,1026,1027,1028,1110,1433,
               1720,1723,1755,1900,2000,2049,2121,2717,3000,3128,3306,3389,3986,4899,5000,5009,5051,
               5060,5101,5190,5357,5432,5631,5666,5800,5900,6000,6646,7070,8000,8008,8080,8443,8888,
               9100,9999,32768,49152,49153,49154,49155,49156) #网上统计常用端口集

starttime = time.time()   #开始的时间(用来统计扫描时间)
def paduankou(ip,port):   #扫描的核心函数
    conn = socket.socket()    #创建套接字
    pa = conn.connect_ex((ip,port))  #创建连接,ip为地址,port为端口connect_ex是connect()函数的扩展版本,成功返回0出错时返回出错码,而不是抛出异常
    conn.settimeout(3)  #设置超时时间
    if(pa == 0):
        print(f"端口{port}打开")   #连接成功打印出来端口号
    else:
        pass

for i in allport :
    threading.Thread(target=paduankou,args=('127.0.0.1',i)).start()  #创建线程使函数跑的效率更高 (没有创建线程时扫描经常用的端口用17秒,创建后0.04秒,跑完所有也就用22秒,时间在我本人接受范围内哈)

jieshutime = time.time()
shijian = jieshutime-starttime  #统计扫描用的时间
print(f"扫描完毕,使用时间:{shijian}秒")

效果图(上面还有一些端口没截到图0.0):
在这里插入图片描述

三、结束

emm,写这个程序第一为了学习,第二也为了摆脱只会使用人家的东西,并且网上很多脚本都是用参数设置具体的值,但是本人非常讨厌记参数哈,所以,我宁愿在自己的程序里面修改哈哈,这是一个挺不好的习惯来的。欢迎各位大哥指出问题跟建议。我还是一个!小白!终极小白!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值