成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面向監獄編程,就靠它了

開發 前端
你有沒有想過,如何編程批量發送一批TCP SYN握手包,來進行端口掃描?如何編程來發送一個偽造了IP地址的ARP數據包和IP數據報文?甚至,如何編程來發送一個偽造了MAC地址的以太網數據幀?

網絡編程大家都學過吧?

  1. socket -> bind -> listen -> accept-> recv/recvfrom -> send/sendto 

一氣呵成,什么select、poll、epoll多路復用模型信手拈來。

但這一套東西,只是開發建立在傳輸層TCP、UDP之上的應用程序。

[[397730]]

你有沒有想過,如何編程批量發送一批TCP SYN握手包,來進行端口掃描?

如何編程來發送一個偽造了IP地址的ARP數據包和IP數據報文?

甚至,如何編程來發送一個偽造了MAC地址的以太網數據幀?

一旦你掌握了上面幾招,玩轉數據包不是問題,開發各種神器不在話下。但一定要用在正途上,不要面向監獄編程哦~

[[397731]]

那到底如何構造發送各種各樣的數據包呢?今天給大家介紹一個強大的玩意:scapy

這是一個強大的數據包構造工具,你可以在Python中使用它,是時候喊一聲:Python大法好了!

ARP

我們拿ARP開刀,ARP是地址解析協議,局域網中通信需要使用網卡的MAC地址,而網絡層通信使用的是IP地址,在應用程序的數據包被發送出去之前,在IP報文前面添加以太網幀頭時,需要填寫收件人的MAC地址,如果是局域網內部通信,這個收件人地址就是目的電腦的網卡MAC地址,而如果是互聯網上的公網IP地址,這個收件人地址就是網關的MAC地址。

無論怎樣,總得有個MAC地址才行,那怎么來呢?這就是ARP協議要干的事,它能將一個IP地址轉換成一個MAC地址。

ARP解析的過程這里就不詳述了,簡單來說,比如要查詢192.168.1.100的MAC地址,主機使用ARP協議在局域網中發出一聲廣播:192.168.1.100,我叫你一聲你敢答應嗎?

局域網中所有人都能收到這個廣播(因為它的收件人MAC地址是FF-FF-FF-FF-FF-FF),但只有IP地址是192.168.1.100的這個家伙會回一句:爺爺在此!我的MAC地址是xxxxxx。

注意,在我們平時應用程序通信時,以上過程都是操作系統底層協議棧自動完成的,我們的應用程序感知不到這些。

我們可以使用Scapy這個庫,來發起一次ARP解析。

  1. from scapy.all import * 
  2. def arp_scan(ip): 
  3.     answer, uanswer = srp(Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=ip), inter=0.1, timeout=2verbose=False
  4.     mac_list = [] 
  5.     for send, recv in answer: 
  6.         if recv[ARP].op == 2: 
  7.             mac_list.append((recv[ARP].psrc, recv[Ether].hwsrc)) 
  8.         return mac_list 

上面這段代碼,通過scapy庫中的srp函數發送了一個以太網幀,收件人是ff:ff:ff:ff:ff:ff,表明這是個廣播包,鏈路層之上是ARP協議,需要解析的IP是傳入待解析的IP地址參數。

上面的函數一執行,你就能在wireshark中抓到數據包了:

上面說過,正常情況下,只有目標地址是我查的那個主機才會回復我。

但假如你的局域網中有人不懷好意,搶在真正的主機之前回答我:爺爺在此!我的MAC地址是yyyyyy。

那事情就糟了,后面的的通信報文都發給這個假冒的家伙那里去了,這就是大名鼎鼎的ARP欺騙攻擊!

再試想一下,如果查詢的IP地址是網關的IP地址,那后果更嚴重,所有的網絡通信都發到這家伙來了。

既然能發送ARP查詢報文,你把上面的代碼改一下,自然也能發送ARP應答報文···

ARP的故事先說到這里,咱們再來看一下,用scapy做一個端口掃描器。

端口掃描

TCP端口掃描,通過發送三次握手的第一次SYN數據包,根據返回的結果來判斷端口的打開情況:

如果返回ACK+SYN,也就是flags字段是18,則說明端口開啟:

如果返回ACK+RST,也就是flags字段是20,則說明端口關閉:

下面的函數就能實現:

  1. from scapy.all import * 
  2. def port_scan(port): 
  3.     answer, uanswer = sr(IP(dst="192.168.1.1") / fuzz(TCP(dport=int(port), flags="S"))) 
  4.     for s, r in ans: 
  5.         if r[TCP].flags == 18: 
  6.             print("port is Open") 
  7.         if r[TCP].flags == 20: 
  8.             print("port is Closed") 

抓包來看:

握手包和服務器的返回包都能清楚看到,如果在循環中不斷調用該函數,傳入不同的端口,則可以實現批量端口掃描。

scapy構造數據包的能力這只是冰山一角,更多強大的功能等著你去研究。

學習計算機網絡,不要只停留在看書和看博文的基礎上,如果能自己編程收發數據包,去實現ARP、ICMP、DHCP、DNS的功能,或者開發一些簡單的網絡工具,絕對比別人掌握的更加深刻。

最后,給大家留一個思考題,如何通過構造IP報文實現traceroute的路由跟蹤功能呢,想一想,這該如何實現?

 

責任編輯:趙寧寧 來源: 編程技術宇宙
相關推薦

2023-05-09 13:55:08

GPT-4AI

2019-08-20 15:22:40

GitHub代碼開發者

2019-04-12 16:10:32

Python面試題編程

2017-01-06 18:10:22

程序

2018-02-02 10:49:05

編程開發Java

2022-11-02 08:46:42

Go設計模式流程

2020-04-08 17:26:19

QLCSSDHDD

2022-02-16 10:35:19

IBM

2018-01-21 23:23:07

戴爾

2022-09-21 14:17:58

Umi-OCR軟件

2023-09-05 17:42:10

AI模型

2019-10-28 10:57:35

程序員監獄編程

2019-10-28 10:21:00

程序員網絡爬蟲數據

2021-03-11 13:56:13

協議Python網絡

2015-08-14 10:07:06

2020-04-21 09:49:41

運維編程系統

2022-04-02 20:28:12

Reactcotnext前端

2013-07-30 09:42:41

實現編程接口編程對象編程

2017-07-14 15:20:43

Linux文件系統目錄結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日夜夜免费精品 | 亚洲精品欧美 | 麻豆视频国产在线观看 | 午夜成人在线视频 | 第一区在线观看免费国语入口 | 影音先锋中文字幕在线观看 | 日日夜夜狠狠操 | 久久av网站 | 嫩草一区二区三区 | 国产精品一区视频 | 91视频大全 | 孰女乱色一区二区三区 | 国产一区二区三区久久久久久久久 | 欧美激情精品久久久久久 | 午夜欧美一区二区三区在线播放 | 久久精品亚洲国产 | 黄色三级免费 | 亚洲精品成人网 | 一级毛片成人免费看a | 亚洲欧美日韩精品久久亚洲区 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 日韩精品视频在线 | 精品福利在线视频 | 日本亚洲欧美 | 搞黄视频免费看 | 精品在线一区二区三区 | 国产成人自拍一区 | 精品亚洲一区二区三区 | 欧美美女一区二区 | 久久成人精品视频 | 国产视频一区二区 | 欧美网站一区 | 97超碰免费 | 国产不卡视频在线 | 超碰97人人人人人蜜桃 | 国产精品久久久久无码av | 天天玩天天操天天干 | 在线免费观看色 | 91精品国产色综合久久不卡蜜臀 | 1级黄色大片 | 精品国产91久久久久久 |