網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言:
通過(guò)端口掃描我們可以知道目標(biāo)主機(jī)都開放了哪些服務(wù),下面通過(guò)TCP connect來(lái)實(shí)現(xiàn)一個(gè)TCP全連接端口掃描器。
一個(gè)簡(jiǎn)單的端口掃描器
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
def portScanner(host,port):
try:
s = socket(AF_INET,SOCK_STREAM)
s.connect((host,port))
print('[+] %d open' % port)
s.close()
except:
print('[-] %d close' % port)
def main():
setdefaulttimeout(1)
for p in range(1,1024):
portScanner('192.168.0.100',p)
if __name__ == '__main__':
main()
說(shuō)明:
- 原理:對(duì)不同端口進(jìn)行TCP連接,根據(jù)是否連接成功來(lái)判斷端口是否打開
- AF_INET指定使用IPv4協(xié)議,SOCK_STREAM指定使用面向流的TCP協(xié)議
- connect((host, port)),向指定的IP:端口發(fā)起連接
- setdefaulttimeout(1),默認(rèn)超時(shí)時(shí)間為1秒
多線程版本
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading
lock = threading.Lock()
openNum = 0
threads = []
def portScanner(host,port):
global openNum
try:
s = socket(AF_INET,SOCK_STREAM)
s.connect((host,port))
lock.acquire()
openNum+=1
print('[+] %d open' % port)
lock.release()
s.close()
except:
pass
def main():
setdefaulttimeout(1)
for p in range(1,1024):
t = threading.Thread(target=portScanner,args=('192.168.0.100',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()
說(shuō)明:
- 使用多線程,1、t = threading.Thread() 2、t.start() 3、t.join()
- 多線程要保證線程安全(共享變量的一致性)就要對(duì)處理共享變量的代碼段加鎖
原文鏈接:https://juejin.cn/post/7099242579958431751
相關(guān)推薦
- 2022-08-19 注解配置SpringMVC
- 2022-11-17 C#實(shí)現(xiàn)表格數(shù)據(jù)轉(zhuǎn)實(shí)體的示例代碼_C#教程
- 2022-08-30 關(guān)于Flask高級(jí)_內(nèi)置信號(hào)的介紹和兩個(gè)小實(shí)例
- 2022-05-14 Python偽隨機(jī)數(shù)模塊random詳解_python
- 2022-07-14 docker搭建kafka集群的方法實(shí)現(xiàn)_docker
- 2022-04-18 Unity命令行打包WebGL的示例代碼_C#教程
- 2022-03-17 .NET?6開發(fā)TodoList應(yīng)用引入第三方日志庫(kù)_實(shí)用技巧
- 2023-03-22 Python中數(shù)值比較的效率_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支