Walks

网络安全爱好者

Python3学习系列(三):编写属于自己的端口扫描器

《Python3学习系列(三):编写属于自己的端口扫描器》

前言:接下来会写一系列Python在安全方面的小脚本,大家可以试着敲敲代码,可以用来提升自己学习的兴趣,学习有回馈才有动力。


目录:

0x01:处理流程

0x02:代码实现

0x03:逐行解析


0x01 处理流程

《Python3学习系列(三):编写属于自己的端口扫描器》


0x02 代码实现


# -*- coding: utf-8 -*-
'''
Program:端口扫描器
Function:利用socket库连接端口,进行IP的开放端口扫描
 
Version:Python3.6
Time:2017/10/13
Author:Walks
个人博客:http://www.bywalks.com
'''
 
from socket import *
import threading
 
#建立线程锁
lock = threading.RLock()
openNum = 0
threads = []
 
#端口扫描函数
def portScanner(host,port):
global openNum
    try:
        s = socket(AF_INET,SOCK_STREAM)
        s.connect((host,port))
        if lock.acquire():
            openNum+=1
            print('[+] %d open' % port)
            lock.release()
        s.close()
    except:
        pass
 
def main():
    setdefaulttimeout(1)
    #扫描1-1024端口
    for p in range(1,1024):
        t = threading.Thread(target=portScanner,args=('119.188.97.150',p))
        threads.append(t)
        t.start()     
 
    for t in threads:
        t.join()
 
    print('[*] The scan is complete!')
    print('[*] A total of %d open port ' % (openNum))
 
if __name__ == '__main__':
    main()


0x03:逐行解析


# -*- coding: utf-8 -*-
'''
Program:端口扫描器
Function:利用socket库连接端口,进行IP的开放端口扫描
 
Version:Python3.6
Time:2017/10/13
Author:Walks
个人博客:http://www.bywalks.com
'''

#导入socket和线程库
from socket import *
import threading
 
#建立线程锁,Rlock用来确保多线程多共享资源时,只有一个线程访问共享资源
lock = threading.RLock()
#开放端口数量计算,在这为共享资源
openNum = 0
#线程列表
threads = []
 
#端口扫描函数
def portScanner(host,port):
global openNum
    try:
        #定义socket对象
        s = socket(AF_INET,SOCK_STREAM)
        #连接IP和端口,当连接了才可以运行接下来的代码
        s.connect((host,port))
        #线程锁的利用
        if lock.acquire():
            openNum+=1
            print('[+] %d open' % port)
            lock.release()
        #关闭IP:端口连接
        s.close()
    except:
        pass
 
def main():
    #设置脚本timeout,为socket库里面的
    setdefaulttimeout(1)
    #扫描1-1024端口,range(1,1024)就是1-1024
    for p in range(1,1024):
        #建立线程对象
        t = threading.Thread(target=portScanner,args=('119.188.97.150',p))
        #将对象添加到线程列表
        threads.append(t)
        #开始线程
        t.start()     
    #join:如果一个线程在执行过程中要调用另外一个线程,要等到其完成后才可以运行
    for t in threads:
        t.join()
 
    print('[*] The scan is complete!')
    print('[*] A total of %d open port ' % (openNum))
 
if __name__ == '__main__':
    main()

 

扫描成功图片


《Python3学习系列(三):编写属于自己的端口扫描器》

转载请注明来自:www.bywalks.com

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

70 − 68 =