精华内容
下载资源
问答
  • 1.[文件]tcp.py ~ 2KB下载(69)# -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import systemsystem("title tcp sniffer")system("color 05")# ...

    1.[文件]

    tcp.py ~ 2KB

    下载(69)

    # -*- coding: cp936 -*-

    import socket

    from struct import *

    from time import ctime,sleep

    from os import system

    system("title tcp sniffer")

    system("color 05")

    # the public network interface

    HOST = socket.gethostbyname(socket.gethostname())

    # create a raw socket and bind it to the public interface

    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)

    s.bind((HOST, 0))

    # Include IP headers

    s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

    # receive all packages

    #s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

    # receive a package

    while 1==1:

    packet = s.recvfrom(65565)

    packet = packet[0]

    ip_header = packet[0:20]

    iph = unpack("!BBHHHBBH4s4s",ip_header)

    version = iph[0] >> 4 #Version

    ihl = iph[0] * 0xF #IHL

    iph_length = ihl * 4 #Total Length

    ttl = iph[5]

    protocol = iph[6]

    s_addr = socket.inet_ntoa(iph[8])

    d_addr = socket.inet_ntoa(iph[9])

    print ctime()

    print "Version : " + str(version) + " IHL : " + str(ihl) + " Total Length: "+str(iph_length) + " TTL : " +str(ttl) + " Protocol : " + str(protocol) + " Source Address : " + str(s_addr) + " Destination Address : " + str(d_addr)

    if protocol == 6:

    tcp_header = packet[20:40]

    tcph = unpack("!HHLLBBHHH" , tcp_header)

    source_port = tcph[0]

    dest_port = tcph[1]

    sequence = tcph[2]

    acknowledgement = tcph[3]

    doff_reserved = tcph[4]

    tcph_length = doff_reserved >> 4

    print "Source Port : " + str(source_port) + " Dest Port : " + str(dest_port) + " Sequence Number : " + str(sequence) + " Acknowledgement : " + str(acknowledgement) + " TCP header length : " + str(tcph_length)

    data = packet[40:len(packet)]

    print "Data : " + data

    # disabled promiscuous mode

    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

    展开全文
  • 这次发的是Python解析pcap数据包的脚本,其实用wireshark就能解决大部分的数据包分析问题了,但有时候会遇到分析大量数据包或从大量数据包中提取某个信息的需求,这时用wireshark一个一个的打开就...

    Post Views:

    29,789

    零、前言

    历时数月,终于结束了考研初试,Blog也很长时间没有更新了,期间还是有些小伙伴来Blog看文章很是感动。以后一定会坚持更新,尽量给大家推送一些干货。这次发的是Python解析pcap数据包的脚本,其实用wireshark就能解决大部分的数据包分析问题了,但有时候会遇到分析大量数据包或从大量数据包中提取某个信息的需求,这时用wireshark一个一个的打开就不现实了,这时就要心中默念“Python大法好!”。

    一、pcap数据包格式

    注意,这里是要解析pcap数据包格式的文件,而现在wireshark都是默认保存pcapng类型的文件,pcapng下一代文件格式,是为了突破现有广泛使用但是受限的PCAP格式的一个尝试。我们使用的库scapy,要是解析pcapng或其他类型的数据包文件可能会报错。另外scapy是不自带的,需要下载安装,如果安装不成功可以在kali下直接运行。

    网络模型大家应该有所了解,按不同的标准有七层和五层的分法,wireshark就是按不同层次解析数据

    19821483441496.png

    同理scapy也是如此。下面这段代码打开数据包后是这样的

    def test(filepath):

    pcaps = rdpcap(filepath)

    for p in pcaps:

    print p.show()

    break

    2751483441497.png

    不过scapy主要是分为Ethernet、IP、TCP、Raw这四层,每一层都有每一层的关键字,可以利用键值对的方式直接读取相应的内容。

    二、Python代码

    代码写的比较糙,大家可以根据的自己的需要再改进

    #!/usr/bin/env python

    # -*- coding: UTF-8 -*-

    from scapy.all import *

    import os

    import re

    import shutil

    import time

    rootpath = "/root/pcap/"

    def openfiles(path):

    filelist = []

    files = os.listdir(path)

    for f in files:

    filelist .append(f)

    return filelist

    def writefile(filename,stringlist):

    f = open("/root/result/"+filename+".txt","w")

    for i in stringlist:

    f.write(i+"\n")

    f.close()

    shutil.copy(rootpath+filename,"/root/result/"+filename)

    def search(filename):

    filepath = rootpath+filename

    stringlist = []

    pcaps = rdpcap(filepath)

    for p in pcaps:

    for f in p.payload.payload.fields_desc:

    fvalue = p.payload.getfieldval(f.name)

    reprval = f.i2repr(p.payload,fvalue) #转换成十进制字符串

    if str(f.name)=="src" and reprval=="10.250.109.12": #指定特定的ip地址

    for f2 in p.payload.payload.payload.payload.fields_desc: #payload向下解析一层

    #print f2.name

    if f2.name=="load"or f2.name=="data":

    fvalue = p.payload.getfieldval(f2.name)

    reprval = f2.i2repr(p.payload,fvalue)

    refind = re.compile(r'[A-Fa-f0-9]{32}') #根据自己的需求设置正则

    temp = refind.findall(reprval)

    stringlist.extend(temp)

    if len(stringlist)>0:

    writefile(filename,stringlist) #将解析结果和对应的pcap包保存下来

    if __name__=="__main__":

    filelist = openfiles(rootpath)

    for file in filelist:

    print file

    search(file)

    print "DONE!"

    展开全文
  • python设计tcp数据包协议类

    千次阅读 2018-08-10 09:58:36
    所以,我们需要在每个数据包前面加上数据包的长度用以分割粘连的包。   二.包结构的设计  包的组成:包长度+数据域   包长度:用4个字节存储数据域长度,数据域长度即为其所占字节数  数据域:由若干个...

    一.问题描述

        在tcp编程中,最需要解决的就是粘包分包问题。所以,我们需要在每个数据包前面加上数据包的长度用以分割粘连的包。

     

    二.包结构的设计

        包的组成:包长度+数据域 

        包长度:用4个字节存储数据域长度,数据域长度即为其所占字节数

        数据域:由若干个变量组成,如果是定长变量则不用加变量长度

        定长变量:我们人为规定,传输中的int为4字节定长变量

        变长变量:那就是字符串啦

        文字难理解,那我就画个图吧:

        

        

        上图的第一行是数据包的一个总体结构

        第二行是数据域内部的一个结构(数据域的变量数量和位置都是我们自己定的,上图只是举一个例子而已)

        第三行是具体变量的结构

     

     

        如果不太清楚这个结构,不要紧,我们来举一个具体的例子

        比如我们现在创建一个数据域是这样的数据包:

        数据域:666,"你好啊","hello",888

        这个数据域一共存储了四个变量,开头和结尾是两个整型变量,中间是两个字符串变量。然后我们对这个数据域构建出来的数据包是这个样子的:

        

        

       这下搞明白了吧,那下面就看看怎么用python封装一个类实现上述结构的数据包的组装。

     

    三.代码实现

    
    class Protocol:
        """
        规定:
            数据包头部占4字节
    
            整型占4字节
    
            字符串长度位占2字节
    
            字符串不定长
    
        """
    
        def __init__(self, bs=None):
            """
            如果bs为None则代表需要创建一个数据包
            否则代表需要解析一个数据包
            """
            if bs:
                self.bs = bytearray(bs)
            else:
                self.bs = bytearray(0)
    
        def get_int32(self):
            try:
                ret = self.bs[:4]
                self.bs = self.bs[4:]
                return int.from_bytes(ret, byteorder='little')
            except:
                raise Exception("数据异常!")
    
        def get_str(self):
            try:
                # 拿到字符串字节长度(字符串长度位2字节)
                length = int.from_bytes(self.bs[:2], byteorder='little')
                # 再拿字符串
                ret = self.bs[2:length + 2]
                # 删掉取出来的部分
                self.bs = self.bs[2 + length:]
                return ret.decode(encoding='utf8')
            except:
                raise Exception("数据异常!")
    
        def add_int32(self, val):
            bytes_val = bytearray(val.to_bytes(4, byteorder='little'))
            self.bs += bytes_val
    
        def add_str(self, val):
            bytes_val = bytearray(val.encode(encoding='utf8'))
            bytes_length = bytearray(len(bytes_val).to_bytes(2, byteorder='little'))
            self.bs += (bytes_length + bytes_val)
    
        def get_pck_not_head(self):
            return self.bs
    
        def get_pck_has_head(self):
            bytes_pck_length = bytearray(len(self.bs).to_bytes(4, byteorder='little'))
            return bytes_pck_length + self.bs
    
    
    if __name__ == '__main__':
        p = Protocol()
    
        p.add_int32(666)
        p.add_str("你好啊")
        p.add_str("hello")
        p.add_int32(888)
    
        r = Protocol(p.get_pck_not_head())
    
        print(r.get_int32())
        print(r.get_str())
        print(r.get_str())
        print(r.get_int32())

    代码比较简单,也不够严谨。大家可以按照自己的需求加以修改。

    展开全文
  • 所以,我们需要在每个数据包前面加上数据包的长度用以分割粘连的包。二. 包结构的设计包的组成:包长度+数据域包长度:用4个字节存储数据域长度,数据域长度即为其所占字节数数据域:由若干个变量组成,如果是定长...

    一. 问题描述

    在tcp编程中,最需要解决的就是粘包分包问题。所以,我们需要在每个数据包前面加上数据包的长度用以分割粘连的包。

    二. 包结构的设计

    包的组成:包长度+数据域

    包长度:用4个字节存储数据域长度,数据域长度即为其所占字节数

    数据域:由若干个变量组成,如果是定长变量则不用加变量长度

    定长变量:我们人为规定,传输中的int为4字节定长变量

    变长变量:那就是字符串啦

    文字难理解,那我就画个图吧:

    20190723093446.jpg

    上图的第一行是数据包的一个总体结构

    第二行是数据域内部的一个结构(数据域的变量数量和位置都是我们自己定的,上图只是举一个例子而已)

    第三行是具体变量的结构

    如果不太清楚这个结构,不要紧,我们来举一个具体的例子

    比如我们现在创建一个数据域是这样的数据包:

    数据域:666,"你好啊","hello",888

    这个数据域一共存储了四个变量,开头和结尾是两个整型变量,中间是两个字符串变量。然后我们对这个数据域构建出来的数据包是这个样子的:

    20190723093645.jpg

    这下搞明白了吧,那下面就看看怎么用python封装一个类实现上述结构的数据包的组装。

    三. 代码实现

    class Protocol:

    """

    规定:

    数据包头部占4字节

    整型占4字节

    字符串长度位占2字节

    字符串不定长

    """

    def __init__(self, bs=None):

    """

    如果bs为None则代表需要创建一个数据包

    否则代表需要解析一个数据包

    """

    if bs:

    self.bs = bytearray(bs)

    else:

    self.bs = bytearray(0)

    def get_int32(self):

    try:

    ret = self.bs[:4]

    self.bs = self.bs[4:]

    return int.from_bytes(ret, byteorder='little')

    except:

    raise Exception("数据异常!")

    def get_str(self):

    try:

    # 拿到字符串字节长度(字符串长度位2字节)

    length = int.from_bytes(self.bs[:2], byteorder='little')

    # 再拿字符串

    ret = self.bs[2:length + 2]

    # 删掉取出来的部分

    self.bs = self.bs[2 + length:]

    return ret.decode(encoding='utf8')

    except:

    raise Exception("数据异常!")

    def add_int32(self, val):

    bytes_val = bytearray(val.to_bytes(4, byteorder='little'))

    self.bs += bytes_val

    def add_str(self, val):

    bytes_val = bytearray(val.encode(encoding='utf8'))

    bytes_length = bytearray(len(bytes_val).to_bytes(2, byteorder='little'))

    self.bs += (bytes_length + bytes_val)

    def get_pck_not_head(self):

    return self.bs

    def get_pck_has_head(self):

    bytes_pck_length = bytearray(len(self.bs).to_bytes(4, byteorder='little'))

    return bytes_pck_length + self.bs

    if __name__ == '__main__':

    p = Protocol()

    p.add_int32(666)

    p.add_str("你好啊")

    p.add_str("hello")

    p.add_int32(888)

    r = Protocol(p.get_pck_not_head())

    print(r.get_int32())

    print(r.get_str())

    print(r.get_str())

    print(r.get_int32())

    代码比较简单,也不够严谨。大家可以按照自己的需求加以修改。

    以上这篇python设计tcp数据包协议类的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    展开全文
  • Python解析DNS数据包

    2014-05-11 01:58:00
    工作中有时需要对DNS数据包进行解析,抽取出其中的Qurey Name和Answer中的IP地址,今天写了一个简单的脚本分析PCAP包中的DNS,用到了dpkt模块。 我只抽取了关键的Query Name和Answer中的IP地址,没有解析授权和额外...
  • 因为网络拓扑发现和操作系统识别都是通过wireshark抓取网络上的通信数据包实现的,所以想对wireshark抓取到的pcap数据包进行解析,并且进行网络特性及其具体值的提取,并将其保存成csv格式。一个下午的时间,终于让...
  • #!/usr/bin/python #coding=utf-8 import dpkt import socket def findHivemind(pcap): for (ts, buf) in pcap: try: eth = dpkt.ethernet.Ethernet(buf) ip = eth.data
  • python解析数据包

    千次阅读 2017-02-03 16:17:48
    tcp.py  复制代码代码如下: # -*- coding: cp936 -*- import socket from struct import * from time import ctime,sleep from os import system system('title tcp sniffer') system('color...
  • # -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import systemsystem('title tcp sniffer')system('color 05')# the public network interfaceHOST = socket.gethos...
  • 读取pcap包,打印详细的icmp/tcp/udp协议。读取pcap包或网络接口
  • # -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import systemsystem(&...title tcp sniffer")system("color 05")# the public network interface...
  • 解析文件 2019_0416_1558_38.pcap 第一个报文是成功的,与 WireShark 展示一致。#coding=utf-8import osimport sysfrom dpkt.ip import IPfrom dpkt.pcap import Reader as PReaderfrom dpkt.ethernet import ...
  • 2.2 根据列表标签查找输出 我们可以查看第一个数据包:package[0]是查看第一个数据包的数据,package[0].show()是查看第一个数据包的详细信息,scapy是按照按照 TCP/IP 四层参考模型显示详细包信息的,即:链路层 ...
  • 最常见的示例是TCP / IP数据包,但不一定限于网络数据包。 这是一个简单的例子。 假设我们要制造一个“智能”洗衣机,方法是连接一台 ,然后与您的其他智能设备进行对话,并在完成洗衣量以及当日完成洗衣量时向您...
  • 1.[文件]tcp.py ~ 2KB下载(69)# -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import systemsystem('title tcp sniffer')system('color 05')# the public network ...
  • tcp.py 复制代码 代码如下:# -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import system system(‘title tcp sniffer’)system(‘color 05’) # ...
  • Python Scapy发送数据包

    千次阅读 2019-08-25 09:15:02
    数据包 包是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。...数据包的结构:数据包的结构非常复杂,不是三言两语能够说清的,在这里主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是...
  • pkt = pcap.pcap(iface, promisc=True, immediate=True, timeout_ms=50) # print(pkt) # filter method filters = { 'DNS': 'udp port 53', 'HTTP': 'tcp port 80' } #pkt.setfilter(filters['DNS']) print(filters...
  • 最近很多人问怎么抓网页数据,据我所知,常见的编程语言(c++,java,python)都可以实现抓网页数据,甚至很多统计计算的语言(r,matlab)都有可以实现和网站交互的包。 本人试过用java,python,r抓网页,感觉语...
  • python做个抓包工具,下面有写代码不明白,请老师指点一下. ``` while True: packet = s.recvfrom(65565) packet = packet[0] ip_header = packet[0:20] iph = unpack('!BBHHHBBH4s4s' , ip_header) ...
  • scapy具有模拟发送数据包、监听解析数据包、互联网协议解析、数据挖掘等多种用处。这里我们只来说一下scapy监听数据包,并按照不同的协议进行解析。 首先需要安装scapy包,点击下载 python库的安装方法请参考...
  • 这段代码直接把数据packet_base作为ip的载荷了,怎么才能是packet_base作为tcp的载荷呢?谢谢 sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP) sock.sendto(packet_base, 0, (IP_...
  • scapy 是一个python编写的功能强大的网络数据包操作库,可以仿造,捕获和解析大量不同协议类型的数据包。1 scapy 安装与交互使用可参考 http://scapy.readthedocs.io/en/latest/usage.html注意事项:安装 graphviz ...
  • Scapy嗅探TCP数据包

    千次阅读 2018-01-23 18:06:35
    /usr/bin/python #coding=utf-8 import re import optparse from scapy.all import * def findCreditCard(pkt): raw = pkt.sprintf('%Raw.load%') # American Express信用卡由34或37开头的15位数字组成 ...
  • 上一节解析了IP首部报文后,本节继续解析TCP报文首部。TCP协议处于OSI七层模型的传输层,传输层的作用就是负责管理端到端的通信连接问题。连续ARQ(automatic repeat request 自动重传请求)协议使得的TCP协议成为一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,397
精华内容 3,358
关键字:

python解析tcp数据包

python 订阅