本文目錄一覽:
- 1、python能做什麼有趣的東西
- 2、如何用Scapy寫一個端口掃描器
- 3、花了2萬多買的Python70個項目,現在分享給大家,練手進廠靠它了
- 4、python寫的一個掃描器,運行nosetests沒有反應
- 5、如何利用Python掃描服務器上的文件
- 6、如何用python編寫一個高效的多線程端口掃描器
python能做什麼有趣的東西
python能做什麼有趣的東西?下面給大家介紹35個Python實例:
1. Python3 實現圖片識別
2. Python3 圖片隱寫術
3. 200 行 Python 代碼實現 2048
4. Python實現3D建模工具
5. 使用 Python 定製詞雲
相關推薦:《Python教程》
6. Python3 智能裁切圖片
7.微信變為聊天機器人
8. 使用 Python 解數學方程
9. 使用 Python 創建照片馬賽克
10. Python 基於共現提取《釜山行》人物關係
11. Python 氣象數據分析:《Python 數據分析實戰》
12. NBA常規賽結果預測:利用Python進行比賽數據分析
13. Python 的循環語句和隱含波動率的計算
14. K-近鄰算法實現手寫數字識別系統
15. 數獨遊戲的 Python 實現與破解
16. 基於 Flask 與 MySQL 實現番劇推薦系
17. Python 實現英文新聞摘要自動提取
18. Python 解決哲學家就餐問題
19. Ebay 在線拍賣數據分析
20. 神經網絡實現人臉識別任務
21. 使用 Python 解數學方程
22. Python3 實現火車票查詢工具
23. Python 實現端口掃描器
24. Python3 實現可控制肉雞的反向Shell
25. Python 實現 FTP 弱口令掃描器
26. 基於PyQt5 實現地圖中定位相片拍攝位置
27. Python實現網站模擬登陸
28.Python實現簡易局域網視頻聊天工具
29. 基於 TCP 的 python 聊天程序
30. Python3基於Scapy實現DDos
31. 高德API + Python 解決租房問題
32. 基於 Flask 與 RethinkDB 實現TODO List
33. Python3 實現簡單的 Web 服務器
34. Python 實現 Redis 異步客戶端
35. 仿 StackOverflow 開發在線問答系統
如何用Scapy寫一個端口掃描器
常見的端口掃描類型有:
1. TCP 連接掃描
2. TCP SYN 掃描(也稱為半開放掃描或stealth掃描)
3. TCP 聖誕樹(Xmas Tree)掃描
4. TCP FIN 掃描
5. TCP 空掃描(Null)
6. TCP ACK 掃描
7. TCP 窗口掃描
8. UDP 掃描
下面先講解每種掃描的原理,隨後提供具體實現代碼。
TCP 連接掃描
客戶端與服務器建立 TCP 連接要進行一次三次握手,如果進行了一次成功的三次握手,則說明端口開放。
客戶端想要連接服務器80端口時,會先發送一個帶有 SYN 標識和端口號的 TCP 數據包給服務器(本例中為80端口)。如果端口是開放的,則服務器會接受這個連接並返回一個帶有 SYN 和 ACK 標識的數據包給客戶端。隨後客戶端會返回帶有 ACK 和 RST 標識的數據包,此時客戶端與服務器建立了連接。如果完成一次三次握手,那麼服務器上對應的端口肯定就是開放的。
當客戶端發送一個帶有 SYN 標識和端口號的 TCP 數據包給服務器後,如果服務器端返回一個帶 RST 標識的數據包,則說明端口處於關閉狀態。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
tcp_connect_scan_resp = sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags=”S”),timeout=10)
if(str(type(tcp_connect_scan_resp))==”type ‘NoneType'”):
print “Closed”
elif(tcp_connect_scan_resp.haslayer(TCP)):
if(tcp_connect_scan_resp.getlayer(TCP).flags == 0x12):
send_rst = sr(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags=”AR”),timeout=10)
print “Open”
elif (tcp_connect_scan_resp.getlayer(TCP).flags == 0x14):
print “Closed”
TCP SYN 掃描
這個技術同 TCP 連接掃描非常相似。同樣是客戶端向服務器發送一個帶有 SYN 標識和端口號的數據包,如果目標端口開發,則會返回帶有 SYN 和 ACK 標識的 TCP 數據包。但是,這時客戶端不會返回 RST+ACK 而是返回一個只帶有 RST 標識的數據包。這種技術主要用於躲避防火牆的檢測。
如果目標端口處於關閉狀態,那麼同之前一樣,服務器會返回一個 RST 數據包。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
stealth_scan_resp = sr1(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags=”S”),timeout=10)
if(str(type(stealth_scan_resp))==”type ‘NoneType'”):
print “Filtered”
elif(stealth_scan_resp.haslayer(TCP)):
if(stealth_scan_resp.getlayer(TCP).flags == 0x12):
send_rst = sr(IP(dst=dst_ip)/TCP(sport=src_port,dport=dst_port,flags=”R”),timeout=10)
print “Open”
elif (stealth_scan_resp.getlayer(TCP).flags == 0x14):
print “Closed”
elif(stealth_scan_resp.haslayer(ICMP)):
if(int(stealth_scan_resp.getlayer(ICMP).type)==3 and int(stealth_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]):
print “Filtered”
TCP 聖誕樹(Xmas Tree)掃描
在聖誕樹掃描中,客戶端會向服務器發送帶有 PSH,FIN,URG 標識和端口號的數據包給服務器。如果目標端口是開放的,那麼不會有任何來自服務器的回應。
如果服務器返回了一個帶有 RST 標識的 TCP 數據包,那麼說明端口處於關閉狀態。
但如果服務器返回了一個 ICMP 數據包,其中包含 ICMP 目標不可達錯誤類型3以及 ICMP 狀態碼為1,2,3,9,10或13,則說明目標端口被過濾了無法確定是否處於開放狀態。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
xmas_scan_resp = sr1(IP(dst=dst_ip)/TCP(dport=dst_port,flags=”FPU”),timeout=10)
if (str(type(xmas_scan_resp))==”type ‘NoneType'”):
print “Open|Filtered”
elif(xmas_scan_resp.haslayer(TCP)):
if(xmas_scan_resp.getlayer(TCP).flags == 0x14):
print “Closed”
elif(xmas_scan_resp.haslayer(ICMP)):
if(int(xmas_scan_resp.getlayer(ICMP).type)==3 and int(xmas_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]):
print “Filtered”
TCP FIN掃描
FIN 掃描會向服務器發送帶有 FIN 標識和端口號的 TCP 數據包。如果沒有服務器端回應則說明端口開放。
如果服務器返回一個 RST 數據包,則說明目標端口是關閉的。
如果服務器返回了一個 ICMP 數據包,其中包含 ICMP 目標不可達錯誤類型3以及 ICMP 代碼為1,2,3,9,10或13,則說明目標端口被過濾了無法確定端口狀態。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
fin_scan_resp = sr1(IP(dst=dst_ip)/TCP(dport=dst_port,flags=”F”),timeout=10)
if (str(type(fin_scan_resp))==”type ‘NoneType'”):
print “Open|Filtered”
elif(fin_scan_resp.haslayer(TCP)):
if(fin_scan_resp.getlayer(TCP).flags == 0x14):
print “Closed”
elif(fin_scan_resp.haslayer(ICMP)):
if(int(fin_scan_resp.getlayer(ICMP).type)==3 and int(fin_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]):
print “Filtered”
TCP 空掃描(Null)
在空掃描中,客戶端發出的 TCP 數據包僅僅只會包含端口號而不會有其他任何的標識信息。如果目標端口是開放的則不會回復任何信息。
如果服務器返回了一個 RST 數據包,則說明目標端口是關閉的。
如果返回 ICMP 錯誤類型3且代碼為1,2,3,9,10或13的數據包,則說明端口被服務器過濾了。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
null_scan_resp = sr1(IP(dst=dst_ip)/TCP(dport=dst_port,flags=””),timeout=10)
if (str(type(null_scan_resp))==”type ‘NoneType'”):
print “Open|Filtered”
elif(null_scan_resp.haslayer(TCP)):
if(null_scan_resp.getlayer(TCP).flags == 0x14):
print “Closed”
elif(null_scan_resp.haslayer(ICMP)):
if(int(null_scan_resp.getlayer(ICMP).type)==3 and int(null_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]):
print “Filtered”
TCP ACK掃描
ACK 掃描不是用於發現端口開啟或關閉狀態的,而是用於發現服務器上是否存在有狀態防火牆的。它的結果只能說明端口是否被過濾。再次強調,ACK 掃描不能發現端口是否處於開啟或關閉狀態。
客戶端會發送一個帶有 ACK 標識和端口號的數據包給服務器。如果服務器返回一個帶有 RST 標識的 TCP 數據包,則說明端口沒有被過濾,不存在狀態防火牆。
如果目標服務器沒有任何回應或者返回ICMP 錯誤類型3且代碼為1,2,3,9,10或13的數據包,則說明端口被過濾且存在狀態防火牆。
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
ack_flag_scan_resp = sr1(IP(dst=dst_ip)/TCP(dport=dst_port,flags=”A”),timeout=10)
if (str(type(ack_flag_scan_resp))==”type ‘NoneType'”):
print “Stateful firewall presentn(Filtered)”
elif(ack_flag_scan_resp.haslayer(TCP)):
if(ack_flag_scan_resp.getlayer(TCP).flags == 0x4):
print “No firewalln(Unfiltered)”
elif(ack_flag_scan_resp.haslayer(ICMP)):
if(int(ack_flag_scan_resp.getlayer(ICMP).type)==3 and int(ack_flag_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]):
print “Stateful firewall presentn(Filtered)”
TCP窗口掃描
TCP 窗口掃描的流程同 ACK 掃描類似,同樣是客戶端向服務器發送一個帶有 ACK 標識和端口號的 TCP 數據包,但是這種掃描能夠用於發現目標服務器端口的狀態。在 ACK 掃描中返回 RST 表明沒有被過濾,但在窗口掃描中,當收到返回的 RST 數據包後,它會檢查窗口大小的值。如果窗口大小的值是個非零值,則說明目標端口是開放的。
如果返回的 RST 數據包中的窗口大小為0,則說明目標端口是關閉的。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=80
window_scan_resp = sr1(IP(dst=dst_ip)/TCP(dport=dst_port,flags=”A”),timeout=10)
if (str(type(window_scan_resp))==”type ‘NoneType'”):
print “No response”
elif(window_scan_resp.haslayer(TCP)):
if(window_scan_resp.getlayer(TCP).window == 0):
print “Closed”
elif(window_scan_resp.getlayer(TCP).window 0):
print “Open”
UDP掃描
TCP 是面向連接的協議,而UDP則是無連接的協議。
面向連接的協議會先在客戶端和服務器之間建立通信信道,然後才會開始傳輸數據。如果客戶端和服務器之間沒有建立通信信道,則不會有任何產生任何通信數據。
無連接的協議則不會事先建立客戶端和服務器之間的通信信道,只要客戶端到服務器存在可用信道,就會假設目標是可達的然後向對方發送數據。
客戶端會向服務器發送一個帶有端口號的 UDP 數據包。如果服務器回復了 UDP 數據包,則目標端口是開放的。
如果服務器返回了一個 ICMP 目標不可達的錯誤和代碼3,則意味着目標端口處於關閉狀態。
如果服務器返回一個 ICMP 錯誤類型3且代碼為1,2,3,9,10或13的數據包,則說明目標端口被服務器過濾了。
但如果服務器沒有任何相應客戶端的 UDP 請求,則可以斷定目標端口可能是開放或被過濾的,無法判斷端口的最終狀態。
代碼:
#! /usr/bin/python
import logging
logging.getLogger(“scapy.runtime”).setLevel(logging.ERROR)
from scapy.all import *
dst_ip = “10.0.0.1”
src_port = RandShort()
dst_port=53
dst_timeout=10
def udp_scan(dst_ip,dst_port,dst_timeout):
udp_scan_resp = sr1(IP(dst=dst_ip)/UDP(dport=dst_port),timeout=dst_timeout)
if (str(type(udp_scan_resp))==”type ‘NoneType'”):
retrans = []
for count in range(0,3):
retrans.append(sr1(IP(dst=dst_ip)/UDP(dport=dst_port),timeout=dst_timeout))
for item in retrans:
if (str(type(item))!=”type ‘NoneType'”):
udp_scan(dst_ip,dst_port,dst_timeout)
return “Open|Filtered”
elif (udp_scan_resp.haslayer(UDP)):
return “Open”
elif(udp_scan_resp.haslayer(ICMP)):
if(int(udp_scan_resp.getlayer(ICMP).type)==3 and int(udp_scan_resp.getlayer(ICMP).code)==3):
return “Closed”
elif(int(udp_scan_resp.getlayer(ICMP).type)==3 and int(udp_scan_resp.getlayer(ICMP).code) in [1,2,9,10,13]):
return “Filtered”
print udp_scan(dst_ip,dst_port,dst_timeout)
下面解釋下上述代碼中的一些函數和變量:
RandShort():產生隨機數
type():獲取數據類型
sport:源端口號
dport:目標端口號
timeout:等待相應的時間
haslayer():查找指定層:TCP或UDP或ICMP
getlayer():獲取指定層:TCP或UDP或ICMP
以上掃描的概念可以被用於“多端口掃描”,源碼可以參考這裡:
Scapy 是一個非常好用的工具,使用它可以非常簡單的構建自己的數據包,還可以很輕易的處理數據包的發送和相應。
(譯者註:上述所有代碼均在Kali 2.0下測試通過,建議讀者在Linux環境下測試代碼,如想在Windows上測試,請參見 Scapy官方文檔 配置好scapy環境)
花了2萬多買的Python70個項目,現在分享給大家,練手進廠靠它了
前言:
不管學習哪門語言都希望能做出實際的東西來,這個實際的東西當然就是項目啦,不用多說大家都知道學編程語言一定要做項目才行。
這裡整理了70個Python實戰項目列表,都有完整且詳細的教程,你可以從中選擇自己想做的項目進行參考學習練手,你也可以從中尋找靈感去做自己的項目。
1、【Python 圖片轉字符畫】
2、【200行Python代碼實現2048】
3、【Python3 實現火車票查詢工具】
4、【高德API+Python解決租房問題 】
5、【Python3 色情圖片識別】
6、【Python 破解驗證碼】
7、【Python實現簡單的Web服務器】
8、【pygame開發打飛機 遊戲 】
9、【Django 搭建簡易博客】
10、【Python基於共現提取《釜山行》人物關係】
11、【基於scrapy爬蟲的天氣數據採集(python)】
12、【Flask 開發輕博客】
13、【Python3 圖片隱寫術】
14、【Python 實現簡易 Shell】
15、【使用 Python 解數學方程】
16、【PyQt 實現簡易瀏覽器】
17、【神經網絡實現手寫字符識別系統 】
18、【Python 實現簡單畫板】
19、【Python實現3D建模工具】
20、【NBA常規賽結果預測——利用Python進行比賽數據分析】
21、【神經網絡實現人臉識別任務】
22、【Python文本解析器】
23、【Python3 OpenCV 視頻轉字符動畫】
24、【Python3 實現淘女郎照片爬蟲 】
25、【Python3實現簡單的FTP認證服務器】
26、【基於 Flask 與 MySQL 實現番劇推薦系統】
27、【Python 實現端口掃描器】
28、【使用 Python 3 編寫系列實用腳本】
29、【Python 實現康威生命 遊戲 】
30、【川普撞臉希拉里(基於 OpenCV 的面部特徵交換) 】
31、【Python 3 實現 Markdown 解析器】
32、【Python 氣象數據分析 — 《Python 數據分析實戰》】
33、【Python實現鍵值數據庫】
34、【k-近鄰算法實現手寫數字識別系統】
35、【ebay在線拍賣數據分析】
36、【Python 實現英文新聞摘要自動提取 】
37、【Python實現簡易局域網視頻聊天工具】
38、【基於 Flask 及爬蟲實現微信 娛樂 機器人】
39、【Python實現Python解釋器】
40、【Python3基於Scapy實現DDos】
41、【Python 實現密碼強度檢測器】
42、【使用 Python 實現深度神經網絡】
43、【Python實現從excel讀取數據並繪製成精美圖像】
44、【人機對戰初體驗:Python基於Pygame實現四子棋 遊戲 】
45、【Python3 實現可控制肉雞的反向Shell】
46、【Python打造漏洞掃描器 】
47、【Python應用馬爾可夫鏈算法實現隨機文本生成】
48、【數獨 遊戲 的Python實現與破解】
49、【使用Python定製詞雲】
50、【Python開發簡單計算器】
51、【Python 實現 FTP 弱口令掃描器】
52、【Python實現Huffman編碼解壓縮文件】
53、【Python實現Zip文件的暴力破解 】
54、【Python3 智能裁切圖片】
55、【Python實現網站模擬登陸】
56、【給Python3爬蟲做一個界面.妹子圖網實戰】
57、【Python 3 實現圖片轉彩色字符】
58、【自聯想器的 Python 實現】
59、【Python 實現簡單濾鏡】
60、【Flask 實現簡單聊天室】
61、【基於PyQt5 實現地圖中定位相片拍攝位置】
62、【Python實現模板引擎】
63、【Python實現遺傳算法求解n-queens問題】
64、【Python3 實現命令行動態進度條】
65、【Python 獲取挂號信息並郵件通知】
66、【Python實現java web項目遠端自動化更新部署】
67、【使用 Python3 編寫 Github 自動周報生成器】
68、【使用 Python 生成分形圖片】
69、【Python 實現 Redis 異步客戶端】
70、【Python 實現中文錯別字高亮系統】
最後:
以上項目列表希望可以給你在Python學習中帶來幫助~
獲取方式:轉發 私信“1”
python寫的一個掃描器,運行nosetests沒有反應
運行沒有提示,說明語法沒錯,沒有結束,說明應該在循環中,請檢查代碼是否陷入死循環。
如何利用Python掃描服務器上的文件
大概思路是這樣的:你得有服務器上的訪問權限,可以在服務器上寫一個tcp sever。
你的本地電腦寫一個tcp client。客戶端和服務端可以通信。
客戶端發命令,服務端接收命令,掃描文件,返回數據到客戶端。
如何用python編寫一個高效的多線程端口掃描器
使用多線程處理重複邏輯。建議使用3以上,2.x會存在gil線程鎖分配問題。但目前很多服務器的python都是2.x的
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/302828.html