精华内容
下载资源
问答
  • 2020-12-02 13:22:20

    Python下的网络抓包库pylibpcap、pypcap、pycap这些库其实这些都是libpcap的Python绑定实现,libpcap才是真正的核心。

    pypcap

    目前pypcap和pylibpcap比较流行,特别说一下pypcap在Linux上的编译安装时,首先用python setup.py config配置编译环境,然后使用python setup.py build或install进行编译安装。

    典型的范例(抓取80端口TCP包):

    import pcap

    import dpkt

    pc=pcap.pcap()

    pc.setfilter('tcp port 80')

    for ptime,pdata in pc:

    print ptime,pdata

    p=dpkt.ethernet.Ethernet(pdata)

    if p.data.__class__.__name__=='IP':

    ip='%d.%d.%d.%d'%tuple(map(ord,list(p.data.dst)))

    if p.data.data.__class__.__name__=='TCP':

    if p.data.data.dport==80:

    print p.data.data.data

    ------------------------------------------------------------------------------------------------------------------------------------------

    在windows下,先安装winpcap和pcap import pcap import binascii

    更多相关内容
  • 如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程。 需要的python包:scapy和dpkt 抓包代码: from scapy.sendrecv import sniff from scapy.utils import wrpcap ...
  • Python抓包

    2021-12-06 08:15:05
    Python抓包

    使用Python进行数据爬取时,很多情况下需要登录或需要某些Cookie,如果直接从浏览器中复制Cookie的话每次都要重新复制,使用selenium比较慢,这样很麻烦。因此考虑使用Python抓包,这样的话每次只需要在程序运行后手动登录或点击一次,下面就可以自动进行了。

    依赖的包

    1. scapy (用于抓包)
    2. dpkt (用于分析)
    3. socket (用于获取数据包的IP)

    抓包代码

    from scapy.sendrecv import sniff
    from scapy.utils import wrpcap
    import dpkt
    import socket
    
    ifs = 'Intel(R) Ethernet Connection (5) I219-LM'  # 网卡
    ip_dst = 'xx.xx.xx.xx'  # 目标ip地址
    
    d = sniff(iface=ifs, count=10)
    wrpcap("demo.pcap", d) #保存为pcap文件
    

    分析代码

    可以使用dpkt或scapy中的rdpcap进行分析

    scapy中rdpcap分析

    d = rdpcap('demo.pcap')
    res = []
    for pkt in d.res:
        try:  # 只要应用层数据包,因此如果不包含应用层数据包则进入except
            IP_pkt = pkt.payload  # 获取IP层数据包
            TCP_pkt = IP_pkt.payload  # 获取TCP层数据包
            Raw_pkt = TCP_pkt.payload  # 获取应用层数据包
            data = Raw_pkt.load  # 获取包内具体数据
            res.append(data.decode(errors='ignore'))  # Bytes解码为str
        except AttributeError:
            pass
    for r_i in range(len(res)):
    	# 上面得到的数据每一条都是不完整的,下面就是进行具体筛选和拼接
        getIndex = res[r_i].find('*****这里放入筛选语句')
        if getIndex != -1:
            p_get = res[r_i][getIndex:-1]
            count = 1
            while res[r_i + count].find(r'HTTP/1.1 200 OK') == -1:  # 直到遇到下一个数据包开头
                p_get += res[r_i + count]
                count += 1
            break
    

    dpkt分析

    cookie = ''
    with open("demo.pcap", "rb") as f:
        pcap = dpkt.pcap.Reader(f)
        for timestamp, buf in pcap:
            eth = dpkt.ethernet.Ethernet(buf)  # 获得以太包,即数据链路层包
            if not isinstance(eth.data, dpkt.ip.IP):  # 判断是否是网络层数据
                continue
            ip = eth.data
            dst_ip = socket.inet_ntoa(ip.dst)
            if dst_ip == ip_dst and isinstance(ip.data, dpkt.tcp.TCP):  # 判断是否是传输层且是否符合目标IP(使用sniff过滤器也是一样的)
                tcp = ip.data
                try:
                    request = dpkt.http.Request(tcp.data)  # 请求包
                    for key, value in request.headers.items():  # 请求头
                        if key == 'cookie':
                            cookie = value
                            print(f'找到Cookie = {cookie}')
                except (dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):
                    continue
            if cookie != '':
                break
    if cookie != '':
        try:
            # 这里放置测试采集代码
            print('Cookie正确,开始采集数据')
            break
        except:
            cookie = ''
            print('Cookie不正确,继续获取')
    

    全部代码

    ifs = 'Intel(R) Ethernet Connection (5) I219-LM'  # 网卡
    ip_dst = 'xx.xx.xx.xx'  # 目标ip地址
    while 1:
        d = sniff(iface=ifs, count=100)
        wrpcap("demo.pcap", d) #保存为pcap文件
        cookie = ''
        with open("demo.pcap", "rb") as f:
            pcap = dpkt.pcap.Reader(f)
            for timestamp, buf in pcap:
                eth = dpkt.ethernet.Ethernet(buf)  # 获得以太包,即数据链路层包
                if not isinstance(eth.data, dpkt.ip.IP):  # 判断是否是网络层数据
                    continue
                ip = eth.data
                dst_ip = socket.inet_ntoa(ip.dst)
                if dst_ip == ip_dst and isinstance(ip.data, dpkt.tcp.TCP):  # 判断是否是传输层且是否符合目标IP
                    tcp = ip.data
                    try:
                        request = dpkt.http.Request(tcp.data)  # 请求包
                        for key, value in request.headers.items():  # 请求头
                            if key == 'cookie':
                                cookie = value
                                print(f'找到Cookie = {cookie}')
                    except (dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):
                        continue
                if cookie != '':
                    break
        if cookie != '':
            try:
                # 这里放置测试采集代码
                print('Cookie正确,开始采集数据')
                break
            except:
                cookie = ''
                print('Cookie不正确,继续获取')
    
    展开全文
  • python实现抓包工具 基于winpcap

    千次阅读 2021-06-02 16:08:39
    平时发网络数据都是基于应用层的收发,如果要进行底层发送和接收必须使用另外的工具,这里以winpcap介绍tcpip底层的收发 二、安装包 pip install winpcapy 三、代码编写 1、导入库 from winpcapy import ...

    一、介绍
    平时发网络数据都是基于应用层的收发,如果要进行底层发送和接收必须使用另外的工具,这里以winpcap介绍tcpip底层的收发

    二、安装包
    pip install winpcapy
    在这里插入图片描述
    三、代码编写
    1、导入库

    from winpcapy import WinPcapUtils
    

    2、发数据

    arp_request_hex_template = "%(dst_mac)s%(src_mac)s08060001080006040001" \
                               "%(sender_mac)s%(sender_ip)s%(target_mac)s%(target_ip)s" + "00" * 18
    packet = arp_request_hex_template % {
        "dst_mac": "aa"*6,
        "src_mac": "bb"*6,
        "sender_mac": "bb"*6,
        "target_mac": "cc"*6,
        # 192.168.0.1
        "sender_ip": "c0a80001",
        # 192.168.0.2
        "target_ip": "c0a80002"
    }
    # Send the packet (ethernet frame with an arp request) on the interface
    WinPcapUtils.send_packet("*Ethernet*", bytes.fromhex(packet))
    

    3、收数据

    from winpcapy import WinPcapUtils
    
    # Example Callback function to parse IP packets
    def packet_callback(win_pcap, param, header, pkt_data):
        # Assuming IP (for real parsing use modules like dpkt)
        ip_frame = pkt_data[14:]
        # Parse ips
        src_ip = ".".join([str(ord(b)) for b in ip_frame[0xc:0x10]])
        dst_ip = ".".join([str(ord(b)) for b in ip_frame[0x10:0x14]])
        print("%s -> %s" % (src_ip, dst_ip))
    
    WinPcapUtils.capture_on("*Ethernet*", packet_callback)
    

    指定网卡名称

    from winpcapy import WinPcap
    
    device_name = '\\Device\\NPF_{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}'
    with WinPcap(device_name) as capture:
        capture.send(bytes.fromhex('ff'*6))
    

    git链接
    https://github.com/orweis/winpcapy

    展开全文
  • 网络安全课程作业(4)
  • python+scapy 抓包與解析

    2021-04-26 19:40:32
    python 的 scapy 庫可以方便的抓包與解析包,無奈資料很少,官方例子有限,大神博客很少提及, 經過一番嘗試后,總結以下幾點用法以便大家以后使用。python scapy 抓包與解析作為初學者,關心的首先是如何安裝,...

    最近一直在使用做流量分析,今天把 scapy 部分做一個總結。 python 的 scapy 庫可以方便的抓包與解析包,無奈資料很少,官方例子有限,大神博客很少提及, 經過一番嘗試后,總結以下幾點用法以便大家以后使用。

    python scapy 抓包與解析

    作為初學者,關心的首先是如何安裝,本人電腦系統是 fedora, 建議使用 linux。 推薦下載 pip,直接:(當然得在 su 權限下)

    pip install scapy

    b0e2f01d08d3a31e928915669c9c5865.png

    在 terminal 中輸入 scapy, 如果有下面形式即安裝好了:

    7eaa27b97d79209f4ab3680bc7b532f9.png

    抓包

    from scapy.all import *

    dpkt = sniff(iface = "wlp7s0", count = 100)

    b2c760d96dab9b6741c5605787ccdd62.png

    sniff() 是 scapy 內置函數,有很多參數, 如圖:

    7cdd81be9336d764024b1ce07b95150b.png

    這里就不一一解釋, iface 參數是網卡信息, 也就是 eth0 之類的, 我這里是 wlp7s0, count 參數是抓取的連接數量, 這里是 100, 還有 filter 參數是過濾等。

    pcap 格式保存

    wrpcap("demo.pcap", dpkt)

    pcap 格式較為通用, 可以將上述抓取的包保存為 pcap,dpkt 是上面抓取的流量變量。

    數據包解析

    c63892d4fe4fe1a6b1f984dd8e08060b.png

    可以看到有 94 個 tcp 包, 4個 udp 包, 還有兩個其他類型的包。類似於 python 中的 list 類型, 可以使用下標訪問, 比如用 python 可寫個 for 循環遍歷每個連接。長度可以使用 len 計算

    57979b93c91fccaf247dff45e769912d.png

    注意這里 dpkt 不是 list 類型, 也不是 string 類型, 因此如果要進行字符串處理,要把它轉換為 string 類型,

    4ea44a38b7526b0360b2f0fbbc4aa9c4.png

    scapy強大地方在於可以通過字段來查看每一個字段信息,首先我們看一下它有那些字段:

    6ae181789711032e7374c72780afccae.png

    可以使用 ls() 查看支持的協議類型,有很多,具體看幾個:

    9f01d79285cef9bc779f9d2fc1636f93.png

    a1cda3dd641615bbf241f9a52f6535c8.png

    甚至還有硬件信息:

    8dab655b32c1c9689fcb81b01aa0db6a.png

    還有很多, 可以自己去看一下, 不附圖了。知道它有那些字段后, 就可以調用了,隨便舉個例子, 比如第四個連接 dpkt[3]

    76f180115cc18652d8be38fbdb0b6a4e.png

    它的結構非常清楚,首先是 Ether 層, 然后是 IP 層, 然后是 TCP 層,訪問時就按張如圖就可以訪問各個字段信息。

    要注意的是, 不是所有連接都是這幾個層, Ether 是都有的, 但是 udp 連接肯定就沒有 TCP 層, 而是改為 udp 層, ARP 包肯定就沒有 IP 層, 更沒有 TCP 層,如果再 arp 連接使用 dpkt[i][IP] 就會報錯, 因為它沒有 IP 這一層。python 使用時可以時使用 ether 的 type 判斷是不是 IP 包, 使用 ip 的 proto 判斷時 tcp 還是 udp。

    訪問包中的報文可以使用 dpkt[i][Raw].load 字段, (假設第 i +1 個包有報文信息),同樣,如果沒有報文信息, 就沒有 Raw 這一層,也就沒有 load 這一字段。比如這里:

    6ea1f1b11e5a8bed4b78f93a1dea84f5.png

    第六個連接並沒有 Raw 數據,訪問出錯, 第七個有 Raw 數據,可以得到報文信息。

    使用離線數據包

    pcap = sniff(offline = "xx/xx.pcap")`

    展开全文
  • Python抓包并解析json爬虫在使用Python爬虫的时候,通过抓包url,打开url可能会遇见以下类似网址,打开后会出现类似这样的界面,无法继续进行爬虫:例如:需要爬取网页中第二页的数据时,点击F12➡网络(Network)➡...
  • Charles 是一个网络抓包工具,我们可以用它来做 App 的抓包分析,得到 App 运行过程中发生的所有网络请求和响应内容,这就和 Web 端浏览器的开发者工具 Network 部分看到的结果一致。 很多人学习python,不知道从何...
  • 是因为Charles就没有直接监听到App,Charles是监听到了Postern上,Postern就是一个vpn,所以App设置不走代理也没用,Postern照样能监听到,然后Postern再转发到Charles上,这样就完成了抓包。 但是双向验证
  • python爬虫学习——HTTP抓包工具Fiddler

    千次阅读 2022-03-30 22:06:14
    ​ ... Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还...简单的说,它是一款强大的Web调试工具(包含的抓包功能),能记录所有客户端和服务器的HTTP请求和响应,还能模拟HTTP请求的发送。 ​...
  • 现代计算机程序大部分时候离不开网络,作为开发者,在日常开发网络相关的程序或者排查程序错误时经常会用抓包工具来分析网卡收发的数据,比如著名的tcpdump,Wireshark等。今天我们尝试用100行左右的Python代码在...
  • 获取指定网卡上数据刘,解析出其中的 tcp封包信息
  • python抓包实现知乎的私信发送功能!?...作者:elliot,一个有着全栈幻想的新零售产品经理github:https:github.combkidydida_spider说起python爬虫,很多人第一个反应可能会是scrapy或者pyspider,但是今天文章里...
  • 该脚本使用python通过winpcap和网卡驱动交互,从而实现抓包和跨协议栈的发包功能; 在入口函数中增加了脚本使用说明和举例! s = SNIFFER(interface)#设置待监听的网卡 s.start()#设置启动线程开始监听网卡 time....
  • 抓包的同时解析数据包(不能等抓包停止后才解析),可判断IP、TCP或UDP数据包的校验和是否正确;支持BPF过滤器,抓包过程可以暂停和停止;可将数据包存储在pcap文件中,以供wireshark或其它数据包解析工具分析;可以...
  • Python抓包

    千次阅读 2019-01-12 17:35:57
    因为Python当前处理和分析数据的功能强大,当前网络安全用于分析数据包的需求越来越大,所以介绍几个数据包捕获和分析库。 嗅探功能 scapy:底层使用libpcap,最强大的抓包和分析库,支持shell。还能主动构造...
  • pyhton抓包之scapy库的安装 windows安装scapy库 直接通过pip安装 pip install scapy 安装完输入 from scapy import * 可以运行,无报错。但是: from scapy.all import * 会出现如下报错: ImportError: cannot ...
  • try: local_ips=get_local_ip()for timestamp, buf inpcap: eth= dpkt.ethernet.Ethernet(buf) #获得以太,即数据链路层 #print("ip layer:"+eth.data.__class__.__name__) #以太的数据既是网络 ...
  • python tcp 实时抓包

    2020-12-10 12:59:56
    问题:之前我们系统上线后,因为是旧的系统,没有加统计的功能,比如用户喜欢那个页面,是哪些...3,采用python脚本来处理,直接抓包80端口,加上一些处理,入库之内。环境搭建:1,使用到的第三方包:dpkt-1.8.8.ta...
  • python如何抓包

    2020-12-10 13:38:55
    系统环境:windows7,选择windows系统是因为我对自己平时日常机器上的流量...如果你习惯于用python3,数据包的分析完全可以放在3下面做,因为抓包和分析是两个完全独立的过程。需要的python包:scapy和dpkt抓包代码...
  • 目前在完成一个网络抓包工具,用Python实现。在Windows上抓包首选的库或接口自然是Winpcap。自然Winpcap这种接近系统底层和硬件的程序一般都是c语言写的,他提供的开发接口原生也是c的。不过还好,人们已经为其他...
  • 未完待续
  • 一个简单的纯Python网络数据包嗅探器。 当数据包到达给定的网络接口控制器时,数据包将被分解,并将其信息显示在屏幕上。 此应用程序不依赖第三方模块,可以由任何Python 3.x解释器运行。 安装 GNU / Linux 只需...
  • mitmdump是mitmproxy所提供的命令之一。它提供类似于tcpdump的功能,让您可以查看、记录和以编程方式转换HTTP流量。
  • python+winpcap可以实现简单的收发数据链路层的数据 实验: 发包程序:发送数据 from winpcapy import WinPcapUtils # Build a packet buffer # This example-code is built for tutorial purposes, for actual ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,619
精华内容 9,847
关键字:

python网络抓包