20 行代码编写一个简单的端口扫描器
2022-04-13 09:56:27 来源:程序员客栈
端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到。这方面的工具也不要太多,搞过 CTF 的朋友会告诉你有多少端口扫描工具,那为什么还要用 Python 再自己实现一遍?这个问题就像饭店里的菜已经很好吃了,为什么还要自己烧菜一样,主要还是为了适合自己的口味,添加自己需要的个性功能。
今天我们将用 20 行代码编写一个简单的端口扫描器。让我们开始吧!
1、需要的库都是标准库,因此内网环境也不影响:
importsocketimportargparseimportsysimporttime
套接字库是一个低级网络接口库,它允许我们在脚本中创建网络连接。argparse 库用于解释传递给我们脚本的参数。sys 库允许我们与系统交互。最后,time 库用来统计耗时。
2、获取一个 host 地址parser=argparse.ArgumentParser()parser.add_argument("host")args=parser.parse_args()
这样脚本在运行的时候,第一个参数就可以传入一个主机名或 ip 地址,下文就可以通过 args.host 来使用。
3、循环所有的端口端口占用 2 个字节,因此其范围是 1-65535
start=time.time()try:forportinrange(1,65536):sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.settimeout(1)result=sock.connect_ex((args.host,port))ifresult==0:print("Port:{}Open".format(port))sock.close()exceptKeyboardInterrupt:sys.exit()end=time.time()
如果 sock.connect_ex 返回了 0 说明端口开放,为了让程序正常退出,我们加上 try except 来捕获键盘发起的中断。
4、完整脚本一旦 for 循环完成并扫描了所有端口,我们将获取时间并打印出脚本运行的时间:
importsocketimportargparseimportsysimporttimeparser=argparse.ArgumentParser()parser.add_argument("host")args=parser.parse_args()start=time.time()try:forportinrange(1,65536):sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.settimeout(1)result=sock.connect_ex((args.host,port))ifresult==0:print("Port:{}Open".format(port))sock.close()exceptKeyboardInterrupt:sys.exit()end=time.time()print(f"Scanningcompletedin:{end-start:.3f}s")
除去空行,代码一共 20 行,运行效果如下:
最后本文分享了端口扫描的简单代码,建议收藏,有帮助还请点赞、转发、关注。
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...