当前位置:首页 » 《随便一记》 » 正文

python端口扫描

0 人参与  2022年12月01日 17:45  分类 : 《随便一记》  评论

点击全文阅读


文章目录

python网络编程socket函数服务器端套接字函数客户端套接字函数公共用途套接字 C/S架构实践 编写端口扫描器多线程端口扫描2.0

python网络编程

socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答请求。使主机间或者一台计算机上的进程间可以通讯。

C/S架构:
在这里插入图片描述

socket函数

socket()函数创建套接字,语法:socket.socket([family[,type[,proto]]])family:套接字家族可以为AF_UNIX(本机内进程间)或者AF_INET(主机与主机间通信)type:套接字类型可以根据面向链接还是非链接分为SOCK_STREAM或SOCK_DGRAMprotocol:协议,一般不填

服务器端套接字函数

s.bind()绑定地址(host,port)到套接字(传入的参数为元组)s.listen()开始tcp监听s.accept()被动接收tcp客户端链接

客户端套接字函数

s.connect() 主动初始化tcp服务器链接s.connect_ex()上个函数的扩展版本,出错返回错误码而不是报异常

公共用途套接字

在这里插入图片描述可能看到这里都很懵,看看实际代码吧

C/S架构实践

在这里插入图片描述0.0.0.0代表所有网卡,死循环表示一直接收客户端请求

写一个客户端请求:

# encoding:utf-8import socketc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)server_host = '127.0.0.1'server_port = 8888c.connect((server_host,server_port))print c.recv(1024)c.close()

这种网页只能实现服务器向客户端发送信息,如果是双向发送,在客户端加send()函数在服务器端加recv()函数

编写端口扫描器

前面我写了编写目录扫描工具,有兴趣的可以康康
首先,如何判断端口是否开放。直接请求该端口,connect_ex请求错误时会返回ture

#!/usr/bin/python# encoding:utf-8import socketc=socket.socket(socket.AF_INET,socket.SOCK_STREAM)host = '127.0.0.1'port = 80if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()

一个套接字只能connect一次,因为扫描要修改套接字的端口。所以创建套接字和close要放在循环内。

#!/usr/bin/python# encoding:utf-8import socketimport sysports = (1,65535)host = sys.argv[1]#接收命令行传入的urlfor port in ports:c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()

现在就是65535个端口全扫啦,一个迷你namp就这十几行代码,但它还是有点慢,下面加入多线程

多线程端口扫描2.0

#!/usr/bin/python# encoding:utf-8import socketimport sysimport threadingimport queuedef scan():while not q.empty():port = q.get()c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)if c.connect_ex((host,port))==0print "%s:%d is open" % (host,port)c.close()if __name__=="__main__":host = sys.argv[1]thread_num = sys.argv[2]q = queue.Queue()for port in range(1,65535):q.put(port)for i in range(int(thread_num))t = threading.Thread(target=scan)t.start()t.join()#子线程全部运行完了结束进程,以免线程卡死

if name == ‘main’:的作用
一个python文件通常有两种使用方法,第一是作为脚本直接执行,第二是 import 到其他的 python 脚本中被调用(模块重用)执行。因此 if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在 if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。


点击全文阅读


本文链接:http://zhangshiyu.com/post/49373.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 苔藓爬满旧日诺言全书+后续+结局顾砚廷慕晚夏免费苔藓爬满旧日诺言全书+后续+结局顾砚廷慕晚夏全书全
  • [我掉蛇女马甲后,点天灯假死丈夫悔疯了]免费试读_婆婆丁若菱蛇女精彩节选推荐
  • 他日若是同淋雪结局+番外(夏尔若林闻舟)他日若是同淋雪结局+番外结局_夏尔若林闻舟列表_笔趣阁(他日若是同淋雪结局+番外)
  • 他心非石反转剧情试读片段_安茗宝宝心掏后续更新+番外
  • 许星森纪冰雪(日暮青山绿渐隐许星森纪冰雪结局+番外)_(许星森纪冰雪)列表_笔趣阁(日暮青山绿渐隐许星森纪冰雪结局+番外)
  • 全文潮痕蚀月光(池清禾***宸)列表_全文潮痕蚀月光
  • 「江月随人处处圆」小说无删减版在线免费阅读_[陆晨小姐孟苒]精彩章节免费试读
  • 阮雾梨闻砚辞阮见微结局+番外全书+后续+结局(闻砚辞阮雾梨)列表_阮雾梨闻砚辞阮见微结局+番外(闻砚辞阮雾梨)阮雾梨闻砚辞阮见微结局+番外全书+后续+结局在线
  • 潮痕蚀月光结局+番外池清禾***宸(潮痕蚀月光结局+番外)全书免费池清禾***宸_潮痕蚀月光结局+番外池清禾***宸列表_笔趣阁(池清禾***宸)
  • 苔藓爬满旧日诺言一口气读完全书+后续全书+后续+结局(慕晚夏顾砚廷)列表_苔藓爬满旧日诺言一口气读完全书+后续(慕晚夏顾砚廷)苔藓爬满旧日诺言一口气读完全书+后续全书+后续+结局在线
  • 「孕弟」反转剧情碎片化试读_[耀祖弟弟子宫]小说精彩节选试读
  • 旧梦随风去结局+番外(姜予宁沈昭寒)列表_旧梦随风去结局+番外(姜予宁沈昭寒)全书+后续+结局在线

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1