Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
B

K ë(Œqã@s°dZddlmZddlmZddlmZddlmZm	Z	ddl
mZddlmZm
Z
mZmZmZmZmZmZGdd	„d	eƒZGd
d„deƒZGdd
„d
eƒZGdd„deƒZdS)z0
Sessions: decode flow of packets when sniffing
é)Údefaultdict)Úraw)Úconf)Ú	NoPayloadÚPacket)Ú
PacketList)ÚAnyÚCallableÚDefaultDictÚDictÚListÚOptionalÚTupleÚcastc@sjeZdZdZddd„Zedd„ƒZejdd„ƒZed	d
„ƒZejdd
„ƒZedd
„ƒZ	dd„Z
dd„ZdS)ÚDefaultSessionz#Default session: no stream decodingNFcOsH||_||_g|_d|_||_|jrD|j|j_|j|j_d|_d|_dS)NrF)Ú_DefaultSession__prnÚ_DefaultSession__storeÚlstÚ_DefaultSession__countÚ
_supersessionÚprnÚstore)ÚselfrrZsupersessionÚargsZkarg©rúŒ/build/wlanpi-profiler-8o1rr4/wlanpi-profiler-1.0.9/debian/wlanpi-profiler/opt/wlanpi-profiler/lib/python3.7/site-packages/scapy/sessions.pyÚ__init__ s	

zDefaultSession.__init__cCs|jS)N)r)rrrrr4szDefaultSession.storecCs|jr||j_n||_dS)N)rrr)rÚvalrrrr9s
cCs|jS)N)r)rrrrrAszDefaultSession.prncCs|jr||j_n||_dS)N)rrr)rÚfrrrrFs
cCs|jr|jjS|jSdS)N)rÚcountr)rrrrrNszDefaultSession.countcCs$|jrt|jjdƒSt|jdƒSdS)NZSniffed)rrr)rrrrÚtoPacketListVszDefaultSession.toPacketListcCst|sdSt|tƒr0x|D]}t ||¡qWdS|jd7_|jrP|j |¡|jrp| |¡}|dk	rpt	|ƒdS)zpDEV: entry point. Will be called by sniff() for each
        received packet (that passes the filters).
        Né)
Ú
isinstanceÚlistrÚon_packet_receivedrrrÚappendrÚprint)rÚpktÚpÚresultrrrr$]s


z!DefaultSession.on_packet_received)NFN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÚpropertyrÚsetterrrr r$rrrrrs
rc@s(eZdZdZdd„Zdd„Zdd„ZdS)	Ú	IPSessionzVDefragment IP packets 'on-the-flow'.

    Usage:
    >>> sniff(session=IPSession)
    cOs tj|f|ž|Žttƒ|_dS)N)rrrr#Ú	fragments)rrÚkwargsrrrrxszIPSession.__init__cCsÈddlm}m}||kr|S||}d|_|jdks<|jjrÀ|j|j|j	|j
f}|j| |¡|jjs¼zH|j|djdkr®g}||j||gƒ|d}| 
t|ƒ¡}|SWd|j|=XdS|SdS)Nr)Ú_defrag_listÚIP)Úscapy.layers.inetr3r4Z_defrag_posÚfragÚflagsZMFÚidÚsrcÚdstÚprotor1r%Ú	__class__r)rÚpacketr3r4ÚipZuniqÚdefragZdefragmented_packetrrrÚ_ip_process_packet}s(

zIPSession._ip_process_packetcCs|sdSt || |¡¡dS)N)rr$r@)rr'rrrr$˜s
zIPSession.on_packet_receivedN)r*r+r,r-rr@r$rrrrr0qsr0c@sTeZdZdZdd„Zdd„Zdd„Zdd	„Zd
d„ZeZ	dd
„Z
dd„Zdd„ZdS)ÚStringBufferaWStringBuffer is an object used to re-order data received during
    a TCP transmission.

    Each TCP fragment contains a sequence number, which marks
    (relatively to the first sequence number) the index of the data contained
    in the fragment.

    If a TCP fragment is missed, this class will fill the missing space with
    zeros.
    cCstdƒ|_d|_g|_dS)Nór)Ú	bytearrayÚcontentÚcontent_lenÚ
incomplete)rrrrr­s
zStringBuffer.__init__cCs„t|ƒ}|d}|||jkrj|jd||j|7_|j |j|f¡|||_t|jƒ|jksjt‚|t|jƒ|||…<dS)Nr!ó)ÚlenrErDrFr%ÚAssertionErrorÚ
memoryview)rÚdataÚseqÚdata_lenrrrr%³s
zStringBuffer.appendcCsdS)NTr)rrrrÚfullÃszStringBuffer.fullcCs| ¡dS)N)r)rrrrÚclearÉszStringBuffer.clearcCs
t|jƒS)N)ÚboolrE)rrrrÚ__bool__ÍszStringBuffer.__bool__cCs|jS)N)rE)rrrrÚ__len__ÒszStringBuffer.__len__cCs
t|jƒS)N)ÚbytesrD)rrrrÚ	__bytes__ÖszStringBuffer.__bytes__cCstt| ¡ƒS)N)rÚstrrT)rrrrÚ__str__ÚszStringBuffer.__str__N)
r*r+r,r-rr%rNrOrQÚ__nonzero__rRrTrVrrrrrA¢s
rAcs6eZdZdZdZd
‡fdd„	Zdd„Zdd	„Z‡ZS)Ú
TCPSessiona"A Session that matches seq/ack packets together to dissect
    special protocols, such as HTTP.

    DEV: implement a class-function `tcp_reassemble` in your Packet class::

        @classmethod
        def tcp_reassemble(cls, data, metadata):
            # data = the reassembled data from the same request/flow
            # metadata = empty dictionary, that can be used to store data
            [...]
            # If the packet is available, return it. Otherwise don't.
            # Whenever you return a packet, the buffer will be discarded.
            return pkt
            # Otherwise, maybe store stuff in metadata, and return None,
            # as you need additional data.
            return None

    For more details and a real example, see:
    https://scapy.readthedocs.io/en/latest/usage.html#how-to-use-tcpsession-to-defragment-tcp-packets

    :param app: Whether the socket is on application layer = has no TCP
                layer. This is used for instance if you are using a native
                TCP socket. Default to False
    z_TCP {IP:%IP.src%}{IPv6:%IPv6.src%}:%r,TCP.sport% > {IP:%IP.dst%}{IPv6:%IPv6.dst%}:%r,TCP.dport%Fcs<tt|ƒj||Ž||_|r*d|_i|_ntdd„ƒ|_dS)NrBcSs
tƒifS)N)rArrrrÚ<lambda>rBz%TCPSession.__init__.<locals>.<lambda>)ÚsuperrXrÚapprKÚmetadatarÚ	tcp_frags)rr[rr2)r<rrrüszTCPSession.__init__cCsÜ|jrT|j}t|dƒs|S|jt|ƒ7_| |j|j¡}|rPd|_i|_|SdSddlm}m	}|rp||krt|S||j
}t|tt
jfƒr’|S|j}||j}| |j¡}|j|\}	}
d|
krò|j}t|dƒrÜ|j}n|S||
d<||
d<n|
d}|
 dd¡}|dkr |d}|
d<||}|	 ||¡||jjsP||jjrXd	|
d
<||jjrnd	|
d<d}
|	 ¡rŠ|t|	ƒ|
ƒ}
|
rØ|	 ¡|
 ¡|j|=|j ¡||krÐd||_d||_||
SdS)zzProcess each packet: matches the TCP seq/ack numbers
        to follow the TCP streams, and orders the fragments.
        Útcp_reassemblerBNr)r4ÚTCPÚ	pay_classÚrelative_seqr!TZtcp_endZtcp_psh) r[r<ÚhasattrrKrSr^r\r5r4r_Úpayloadr"rrZ
padding_layerÚoriginalrLZsprintfÚfmtr]Úgetr%r7ÚFÚRÚPrNrOZ
underlayerZremove_payloadrHÚchksum)rr'r`r4r_ZpayZnew_datarLÚidentrKr\r^rar=rrrÚ_process_packet
sf










zTCPSession._process_packetcCs4|sdS| |¡}|sdS| |¡}t ||¡dS)z—Hook to the Sessions API: entry point of the dissection.
        This will defragment IP if necessary, then process to
        TCP reassembly.
        N)r@rlrr$)rr'rrrr$Xs

zTCPSession.on_packet_received)F)	r*r+r,r-rerrlr$Ú
__classcell__rr)r<rrXßs
NrXN)r-ÚcollectionsrZscapy.compatrZscapy.configrZscapy.packetrrZscapy.plistrrr	r
rrr
rrÚobjectrr0rArXrrrrÚ<module>s(T1=