Copy disabled (too large)
Download .txt
Showing preview only (14,499K chars total). Download the full file to get everything.
Repository: secdev/scapy
Branch: master
Commit: b1add1f796b4
Files: 773
Total size: 13.7 MB
Directory structure:
gitextract_vo5e70zj/
├── .config/
│ ├── ci/
│ │ ├── install.ps1
│ │ ├── install.sh
│ │ ├── openldap/
│ │ │ ├── config.ldif
│ │ │ ├── install.sh
│ │ │ └── testdata.ldif
│ │ ├── openssl.py
│ │ ├── test.ps1
│ │ ├── test.sh
│ │ ├── windows/
│ │ │ ├── InstallNpcap.ps1
│ │ │ └── InstallWindumpNpcap.ps1
│ │ └── zipapp.sh
│ ├── codespell_ignore.txt
│ └── mypy/
│ ├── mypy.ini
│ ├── mypy_check.py
│ ├── mypy_deployment_stats.py
│ └── mypy_enabled.txt
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── BUGS.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── codecov.yml
│ └── workflows/
│ ├── cifuzz.yml
│ └── unittests.yml
├── .gitignore
├── .packit.yml
├── .readthedocs.yml
├── .travis.yml
├── CONTRIBUTING.md
├── LICENSE
├── MANIFEST.in
├── README.md
├── doc/
│ ├── LICENSE
│ ├── notebooks/
│ │ ├── HTTP_2_Tuto.ipynb
│ │ ├── Scapy in 15 minutes.ipynb
│ │ ├── graphs-ipids.ipynb
│ │ └── tls/
│ │ ├── notebook1_x509.ipynb
│ │ ├── notebook2_tls_protected.ipynb
│ │ ├── notebook3_tls_compromised.ipynb
│ │ ├── notebook4_tls13.ipynb
│ │ └── raw_data/
│ │ ├── README.md
│ │ ├── pki/
│ │ │ ├── ca_cert.der
│ │ │ ├── ca_key.der
│ │ │ ├── srv_cert.pem
│ │ │ └── srv_key.pem
│ │ ├── tls_nss_example.keys.txt
│ │ ├── tls_nss_example.pcap
│ │ ├── tls_session_13/
│ │ │ ├── 01_cli.raw
│ │ │ ├── 02_srv.raw
│ │ │ ├── 03_srv.raw
│ │ │ ├── 04_srv.raw
│ │ │ ├── 05_srv.raw
│ │ │ ├── 06_srv.raw
│ │ │ ├── 07_cli.raw
│ │ │ ├── 08_cli.raw
│ │ │ ├── 09_srv.raw
│ │ │ ├── cli_key.raw
│ │ │ └── srv_key.raw
│ │ ├── tls_session_compromised/
│ │ │ ├── 01_cli.raw
│ │ │ ├── 02_srv.raw
│ │ │ ├── 03_cli.raw
│ │ │ ├── 04_srv.raw
│ │ │ └── 05_cli.raw
│ │ └── tls_session_protected/
│ │ ├── 01_cli.raw
│ │ ├── 02_srv.raw
│ │ ├── 03_srv.raw
│ │ ├── 04_srv.raw
│ │ ├── 05_cli.raw
│ │ ├── 06_srv.raw
│ │ └── 07_cli.raw
│ ├── scapy/
│ │ ├── Makefile
│ │ ├── README
│ │ ├── _ext/
│ │ │ ├── linkcode_res.py
│ │ │ └── scapy_doc.py
│ │ ├── _static/
│ │ │ ├── _dummy
│ │ │ └── vethrelay.sh
│ │ ├── _templates/
│ │ │ ├── README.md
│ │ │ ├── module.rst_t
│ │ │ └── package.rst_t
│ │ ├── advanced_usage/
│ │ │ ├── asn1_snmp.rst
│ │ │ ├── automaton.rst
│ │ │ ├── cbor.rst
│ │ │ ├── fwdmachine.rst
│ │ │ ├── index.rst
│ │ │ └── pipetools.rst
│ │ ├── backmatter.rst
│ │ ├── build_dissect.rst
│ │ ├── conf.py
│ │ ├── development.rst
│ │ ├── extending.rst
│ │ ├── functions.rst
│ │ ├── graphics/
│ │ │ └── fwdmachine.drawio
│ │ ├── index.rst
│ │ ├── installation.rst
│ │ ├── introduction.rst
│ │ ├── layers/
│ │ │ ├── automotive.rst
│ │ │ ├── bluetooth.rst
│ │ │ ├── dcerpc.rst
│ │ │ ├── dcom.rst
│ │ │ ├── dotnet.rst
│ │ │ ├── gssapi.rst
│ │ │ ├── http.rst
│ │ │ ├── index.rst
│ │ │ ├── kerberos.rst
│ │ │ ├── ldap.rst
│ │ │ ├── netflow.rst
│ │ │ ├── pnio.rst
│ │ │ ├── sctp.rst
│ │ │ ├── smb.rst
│ │ │ ├── tcp.rst
│ │ │ └── tuntap.rst
│ │ ├── make.bat
│ │ ├── routing.rst
│ │ ├── troubleshooting.rst
│ │ └── usage.rst
│ ├── scapy.1
│ ├── syntax/
│ │ └── vim_uts_syntax/
│ │ ├── ftdetect/
│ │ │ ├── filetype.vim
│ │ │ └── uts.vim
│ │ ├── install.sh
│ │ └── syntax/
│ │ └── uts.vim
│ └── vagrant_ci/
│ ├── README.md
│ ├── Vagrantfile
│ ├── provision_freebsd.sh
│ ├── provision_netbsd.sh
│ └── provision_openbsd.sh
├── pyproject.toml
├── run_scapy
├── run_scapy.bat
├── scapy/
│ ├── __init__.py
│ ├── __main__.py
│ ├── all.py
│ ├── ansmachine.py
│ ├── arch/
│ │ ├── __init__.py
│ │ ├── bpf/
│ │ │ ├── __init__.py
│ │ │ ├── consts.py
│ │ │ ├── core.py
│ │ │ ├── pfroute.py
│ │ │ └── supersocket.py
│ │ ├── common.py
│ │ ├── libpcap.py
│ │ ├── linux/
│ │ │ ├── __init__.py
│ │ │ └── rtnetlink.py
│ │ ├── solaris.py
│ │ ├── unix.py
│ │ └── windows/
│ │ ├── __init__.py
│ │ ├── native.py
│ │ └── structures.py
│ ├── as_resolvers.py
│ ├── asn1/
│ │ ├── __init__.py
│ │ ├── asn1.py
│ │ ├── ber.py
│ │ └── mib.py
│ ├── asn1fields.py
│ ├── asn1packet.py
│ ├── automaton.py
│ ├── autorun.py
│ ├── base_classes.py
│ ├── cbor/
│ │ ├── __init__.py
│ │ ├── cbor.py
│ │ └── cborcodec.py
│ ├── compat.py
│ ├── config.py
│ ├── consts.py
│ ├── contrib/
│ │ ├── __init__.py
│ │ ├── altbeacon.py
│ │ ├── aoe.py
│ │ ├── automotive/
│ │ │ ├── __init__.py
│ │ │ ├── autosar/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── pdu.py
│ │ │ │ ├── secoc.py
│ │ │ │ ├── secoc_canfd.py
│ │ │ │ └── secoc_pdu.py
│ │ │ ├── bmw/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── definitions.py
│ │ │ │ ├── enumerator.py
│ │ │ │ └── hsfz.py
│ │ │ ├── ccp.py
│ │ │ ├── doip.py
│ │ │ ├── ecu.py
│ │ │ ├── gm/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── gmlan.py
│ │ │ │ ├── gmlan_ecu_states.py
│ │ │ │ ├── gmlan_logging.py
│ │ │ │ ├── gmlan_scanner.py
│ │ │ │ └── gmlanutils.py
│ │ │ ├── kwp.py
│ │ │ ├── obd/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── iid/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── iids.py
│ │ │ │ ├── mid/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── mids.py
│ │ │ │ ├── obd.py
│ │ │ │ ├── packet.py
│ │ │ │ ├── pid/
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── pids.py
│ │ │ │ │ ├── pids_00_1F.py
│ │ │ │ │ ├── pids_20_3F.py
│ │ │ │ │ ├── pids_40_5F.py
│ │ │ │ │ ├── pids_60_7F.py
│ │ │ │ │ ├── pids_80_9F.py
│ │ │ │ │ └── pids_A0_C0.py
│ │ │ │ ├── scanner.py
│ │ │ │ ├── services.py
│ │ │ │ └── tid/
│ │ │ │ ├── __init__.py
│ │ │ │ └── tids.py
│ │ │ ├── scanner/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── configuration.py
│ │ │ │ ├── enumerator.py
│ │ │ │ ├── executor.py
│ │ │ │ ├── graph.py
│ │ │ │ ├── staged_test_case.py
│ │ │ │ └── test_case.py
│ │ │ ├── someip.py
│ │ │ ├── uds.py
│ │ │ ├── uds_ecu_states.py
│ │ │ ├── uds_logging.py
│ │ │ ├── uds_scan.py
│ │ │ ├── volkswagen/
│ │ │ │ ├── __init__.py
│ │ │ │ └── definitions.py
│ │ │ └── xcp/
│ │ │ ├── __init__.py
│ │ │ ├── cto_commands_master.py
│ │ │ ├── cto_commands_slave.py
│ │ │ ├── scanner.py
│ │ │ ├── utils.py
│ │ │ └── xcp.py
│ │ ├── avs.py
│ │ ├── bfd.py
│ │ ├── bgp.py
│ │ ├── bier.py
│ │ ├── bp.py
│ │ ├── cansocket.py
│ │ ├── cansocket_native.py
│ │ ├── cansocket_python_can.py
│ │ ├── carp.py
│ │ ├── cdp.py
│ │ ├── chdlc.py
│ │ ├── coap.py
│ │ ├── concox.py
│ │ ├── diameter.py
│ │ ├── dicom.py
│ │ ├── dtp.py
│ │ ├── eddystone.py
│ │ ├── eigrp.py
│ │ ├── enipTCP.py
│ │ ├── erspan.py
│ │ ├── esmc.py
│ │ ├── ethercat.py
│ │ ├── etherip.py
│ │ ├── exposure_notification.py
│ │ ├── geneve.py
│ │ ├── gtp.py
│ │ ├── gtp_v2.py
│ │ ├── gxrp.py
│ │ ├── hicp.py
│ │ ├── homeplugav.py
│ │ ├── homepluggp.py
│ │ ├── homeplugsg.py
│ │ ├── http2.py
│ │ ├── ibeacon.py
│ │ ├── icmp_extensions.py
│ │ ├── ife.py
│ │ ├── igmp.py
│ │ ├── igmpv3.py
│ │ ├── ikev2.py
│ │ ├── isis.py
│ │ ├── isotp/
│ │ │ ├── __init__.py
│ │ │ ├── isotp_native_socket.py
│ │ │ ├── isotp_packet.py
│ │ │ ├── isotp_scanner.py
│ │ │ ├── isotp_soft_socket.py
│ │ │ └── isotp_utils.py
│ │ ├── knx.py
│ │ ├── lacp.py
│ │ ├── ldp.py
│ │ ├── lldp.py
│ │ ├── loraphy2wan.py
│ │ ├── ltp.py
│ │ ├── mac_control.py
│ │ ├── macsec.py
│ │ ├── metawatch.py
│ │ ├── modbus.py
│ │ ├── mount.py
│ │ ├── mpls.py
│ │ ├── mqtt.py
│ │ ├── mqttsn.py
│ │ ├── nfs.py
│ │ ├── nlm.py
│ │ ├── nrf_sniffer.py
│ │ ├── nsh.py
│ │ ├── oam.py
│ │ ├── oncrpc.py
│ │ ├── opc_da.py
│ │ ├── openflow.py
│ │ ├── openflow3.py
│ │ ├── ospf.py
│ │ ├── pfcp.py
│ │ ├── pim.py
│ │ ├── pnio.py
│ │ ├── pnio_dcp.py
│ │ ├── pnio_rpc.py
│ │ ├── portmap.py
│ │ ├── postgres.py
│ │ ├── ppi_cace.py
│ │ ├── ppi_geotag.py
│ │ ├── psp.py
│ │ ├── ptp_v2.py
│ │ ├── ripng.py
│ │ ├── roce.py
│ │ ├── rpl.py
│ │ ├── rpl_metrics.py
│ │ ├── rsvp.py
│ │ ├── rtcp.py
│ │ ├── rtps/
│ │ │ ├── __init__.py
│ │ │ ├── common_types.py
│ │ │ ├── pid_types.py
│ │ │ └── rtps.py
│ │ ├── rtr.py
│ │ ├── rtsp.py
│ │ ├── scada/
│ │ │ ├── __init__.py
│ │ │ ├── iec104/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── iec104_fields.py
│ │ │ │ ├── iec104_information_elements.py
│ │ │ │ └── iec104_information_objects.py
│ │ │ └── pcom.py
│ │ ├── sdnv.py
│ │ ├── sebek.py
│ │ ├── send.py
│ │ ├── skinny.py
│ │ ├── slowprot.py
│ │ ├── socks.py
│ │ ├── stamp.py
│ │ ├── stun.py
│ │ ├── tacacs.py
│ │ ├── tcpao.py
│ │ ├── tcpros.py
│ │ ├── tzsp.py
│ │ ├── vqp.py
│ │ ├── vtp.py
│ │ └── wireguard.py
│ ├── dadict.py
│ ├── data.py
│ ├── error.py
│ ├── fields.py
│ ├── fwdmachine.py
│ ├── interfaces.py
│ ├── layers/
│ │ ├── __init__.py
│ │ ├── all.py
│ │ ├── bluetooth.py
│ │ ├── bluetooth4LE.py
│ │ ├── can.py
│ │ ├── clns.py
│ │ ├── dcerpc.py
│ │ ├── dhcp.py
│ │ ├── dhcp6.py
│ │ ├── dns.py
│ │ ├── dot11.py
│ │ ├── dot15d4.py
│ │ ├── eap.py
│ │ ├── gprs.py
│ │ ├── gssapi.py
│ │ ├── hsrp.py
│ │ ├── http.py
│ │ ├── inet.py
│ │ ├── inet6.py
│ │ ├── ipsec.py
│ │ ├── ir.py
│ │ ├── isakmp.py
│ │ ├── kerberos.py
│ │ ├── l2.py
│ │ ├── l2tp.py
│ │ ├── ldap.py
│ │ ├── llmnr.py
│ │ ├── lltd.py
│ │ ├── mgcp.py
│ │ ├── mobileip.py
│ │ ├── ms_nrtp.py
│ │ ├── msrpce/
│ │ │ ├── __init__.py
│ │ │ ├── all.py
│ │ │ ├── ept.py
│ │ │ ├── msdcom.py
│ │ │ ├── msdrsr.py
│ │ │ ├── mseerr.py
│ │ │ ├── msnrpc.py
│ │ │ ├── mspac.py
│ │ │ ├── raw/
│ │ │ │ ├── README.md
│ │ │ │ ├── __init__.py
│ │ │ │ ├── ept.py
│ │ │ │ ├── ms_dcom.py
│ │ │ │ ├── ms_drsr.py
│ │ │ │ ├── ms_eerr.py
│ │ │ │ ├── ms_nrpc.py
│ │ │ │ ├── ms_rrp.py
│ │ │ │ ├── ms_samr.py
│ │ │ │ ├── ms_srvs.py
│ │ │ │ └── ms_wkst.py
│ │ │ ├── rpcclient.py
│ │ │ └── rpcserver.py
│ │ ├── netbios.py
│ │ ├── netflow.py
│ │ ├── ntlm.py
│ │ ├── ntp.py
│ │ ├── pflog.py
│ │ ├── ppi.py
│ │ ├── ppp.py
│ │ ├── pptp.py
│ │ ├── quic.py
│ │ ├── radius.py
│ │ ├── rip.py
│ │ ├── rtp.py
│ │ ├── sctp.py
│ │ ├── sixlowpan.py
│ │ ├── skinny.py
│ │ ├── smb.py
│ │ ├── smb2.py
│ │ ├── smbclient.py
│ │ ├── smbserver.py
│ │ ├── snmp.py
│ │ ├── spnego.py
│ │ ├── ssh.py
│ │ ├── tftp.py
│ │ ├── tls/
│ │ │ ├── __init__.py
│ │ │ ├── all.py
│ │ │ ├── automaton.py
│ │ │ ├── automaton_cli.py
│ │ │ ├── automaton_srv.py
│ │ │ ├── basefields.py
│ │ │ ├── cert.py
│ │ │ ├── crypto/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── all.py
│ │ │ │ ├── cipher_aead.py
│ │ │ │ ├── cipher_block.py
│ │ │ │ ├── cipher_stream.py
│ │ │ │ ├── ciphers.py
│ │ │ │ ├── common.py
│ │ │ │ ├── compression.py
│ │ │ │ ├── groups.py
│ │ │ │ ├── h_mac.py
│ │ │ │ ├── hash.py
│ │ │ │ ├── hkdf.py
│ │ │ │ ├── kx_algs.py
│ │ │ │ ├── md4.py
│ │ │ │ ├── pkcs1.py
│ │ │ │ ├── prf.py
│ │ │ │ └── suites.py
│ │ │ ├── extensions.py
│ │ │ ├── handshake.py
│ │ │ ├── handshake_sslv2.py
│ │ │ ├── keyexchange.py
│ │ │ ├── keyexchange_tls13.py
│ │ │ ├── quic.py
│ │ │ ├── record.py
│ │ │ ├── record_sslv2.py
│ │ │ ├── record_tls13.py
│ │ │ ├── session.py
│ │ │ └── tools.py
│ │ ├── tpm.py
│ │ ├── tuntap.py
│ │ ├── usb.py
│ │ ├── vrrp.py
│ │ ├── vxlan.py
│ │ ├── windows/
│ │ │ ├── __init__.py
│ │ │ ├── erref.py
│ │ │ ├── registry.py
│ │ │ └── security.py
│ │ ├── x509.py
│ │ └── zigbee.py
│ ├── libs/
│ │ ├── __init__.py
│ │ ├── bluetoothids.py
│ │ ├── ethertypes.py
│ │ ├── extcap.py
│ │ ├── manuf.py
│ │ ├── matplot.py
│ │ ├── rfc3961.py
│ │ ├── structures.py
│ │ ├── test_pyx.py
│ │ └── winpcapy.py
│ ├── main.py
│ ├── modules/
│ │ ├── __init__.py
│ │ ├── krack/
│ │ │ ├── __init__.py
│ │ │ ├── automaton.py
│ │ │ └── crypto.py
│ │ ├── ldaphero.py
│ │ ├── nmap.py
│ │ ├── p0f.py
│ │ ├── p0fv2.py
│ │ ├── ticketer.py
│ │ └── voip.py
│ ├── packet.py
│ ├── pipetool.py
│ ├── plist.py
│ ├── pton_ntop.py
│ ├── py.typed
│ ├── route.py
│ ├── route6.py
│ ├── scapypipes.py
│ ├── sendrecv.py
│ ├── sessions.py
│ ├── supersocket.py
│ ├── themes.py
│ ├── tools/
│ │ ├── UTscapy.py
│ │ ├── __init__.py
│ │ ├── automotive/
│ │ │ ├── __init__.py
│ │ │ ├── isotpscanner.py
│ │ │ ├── obdscanner.py
│ │ │ └── xcpscanner.py
│ │ ├── check_asdis.py
│ │ ├── check_spdx.sh
│ │ ├── generate_bluetooth.py
│ │ ├── generate_ethertypes.py
│ │ ├── generate_manuf.py
│ │ └── scapy_pyannotate.py
│ ├── utils.py
│ ├── utils6.py
│ └── volatile.py
├── setup.py
├── test/
│ ├── __init__.py
│ ├── answering_machines.uts
│ ├── benchmark/
│ │ ├── common.py
│ │ ├── dissection_and_build.py
│ │ └── latency_router.py
│ ├── bpf.uts
│ ├── configs/
│ │ ├── README.md
│ │ ├── bsd.utsc
│ │ ├── cryptography.utsc
│ │ ├── linux.utsc
│ │ ├── scapy-rpc.utsc
│ │ ├── solaris.utsc
│ │ ├── windows.utsc
│ │ └── windows2.utsc
│ ├── contrib/
│ │ ├── altbeacon.uts
│ │ ├── aoe.uts
│ │ ├── automotive/
│ │ │ ├── autosar/
│ │ │ │ ├── pdu.uts
│ │ │ │ └── secoc.uts
│ │ │ ├── bmw/
│ │ │ │ └── hsfz.uts
│ │ │ ├── ccp.uts
│ │ │ ├── doip.uts
│ │ │ ├── ecu.uts
│ │ │ ├── ecu_am.uts
│ │ │ ├── gm/
│ │ │ │ ├── gmlan.uts
│ │ │ │ ├── gmlanutils.uts
│ │ │ │ └── scanner.uts
│ │ │ ├── interface_mockup.py
│ │ │ ├── kwp.uts
│ │ │ ├── obd/
│ │ │ │ ├── obd.uts
│ │ │ │ └── scanner.uts
│ │ │ ├── scanner/
│ │ │ │ ├── configuration.uts
│ │ │ │ ├── enumerator.uts
│ │ │ │ ├── graph.uts
│ │ │ │ ├── staged_test_case.uts
│ │ │ │ ├── test_case.uts
│ │ │ │ └── uds_scanner.uts
│ │ │ ├── someip.uts
│ │ │ ├── testsocket.uts
│ │ │ ├── uds.uts
│ │ │ └── xcp/
│ │ │ ├── xcp.uts
│ │ │ └── xcp_comm.uts
│ │ ├── avs.uts
│ │ ├── bfd.uts
│ │ ├── bgp.uts
│ │ ├── bier.uts
│ │ ├── bp.uts
│ │ ├── canfdsocket_native.uts
│ │ ├── canfdsocket_python_can.uts
│ │ ├── cansocket.uts
│ │ ├── cansocket_native.uts
│ │ ├── cansocket_python_can.uts
│ │ ├── carp.uts
│ │ ├── cdp.uts
│ │ ├── chdlc.uts
│ │ ├── coap.uts
│ │ ├── concox.uts
│ │ ├── diameter.uts
│ │ ├── dicom.uts
│ │ ├── dtp.uts
│ │ ├── eddystone.uts
│ │ ├── eigrp.uts
│ │ ├── enipTCP.uts
│ │ ├── erspan.uts
│ │ ├── esmc.uts
│ │ ├── ethercat.uts
│ │ ├── etherip.uts
│ │ ├── exposure_notification.uts
│ │ ├── geneve.uts
│ │ ├── gtp.uts
│ │ ├── gtp_v2.uts
│ │ ├── gxrp.uts
│ │ ├── hicp.uts
│ │ ├── homeplugav.uts
│ │ ├── homepluggp.uts
│ │ ├── homeplugsg.uts
│ │ ├── http2.uts
│ │ ├── ibeacon.uts
│ │ ├── iec104.uts
│ │ ├── ife.uts
│ │ ├── igmp.uts
│ │ ├── igmpv3.uts
│ │ ├── ikev2.uts
│ │ ├── isis.uts
│ │ ├── isotp_message_builder.uts
│ │ ├── isotp_native_socket.uts
│ │ ├── isotp_packet.uts
│ │ ├── isotp_soft_socket.uts
│ │ ├── isotpscan.uts
│ │ ├── knx.uts
│ │ ├── lacp.uts
│ │ ├── ldp.uts
│ │ ├── lldp.uts
│ │ ├── loraphy2wan.uts
│ │ ├── ltp.uts
│ │ ├── mac_control.uts
│ │ ├── macsec.uts
│ │ ├── metawatch.uts
│ │ ├── modbus.uts
│ │ ├── mount.uts
│ │ ├── mpls.uts
│ │ ├── mqtt.uts
│ │ ├── mqttsn.uts
│ │ ├── nfs.uts
│ │ ├── nlm.uts
│ │ ├── nsh.uts
│ │ ├── oam.uts
│ │ ├── oncrpc.uts
│ │ ├── opc_da.uts
│ │ ├── openflow.uts
│ │ ├── openflow3.uts
│ │ ├── ospf.uts
│ │ ├── pcom.uts
│ │ ├── pfcp.uts
│ │ ├── pim.uts
│ │ ├── pnio.uts
│ │ ├── pnio_dcp.uts
│ │ ├── pnio_rpc.uts
│ │ ├── portmap.uts
│ │ ├── postgres.uts
│ │ ├── ppi_cace.uts
│ │ ├── ppi_geotag.uts
│ │ ├── psp.uts
│ │ ├── ptp_v2.uts
│ │ ├── ripng.uts
│ │ ├── roce.uts
│ │ ├── rpl.uts
│ │ ├── rsvp.uts
│ │ ├── rtcp.uts
│ │ ├── rtps.uts
│ │ ├── rtr.uts
│ │ ├── rtsp.uts
│ │ ├── sdnv.uts
│ │ ├── sebek.uts
│ │ ├── send.uts
│ │ ├── socks.uts
│ │ ├── stamp.uts
│ │ ├── stun.uts
│ │ ├── tacacs.uts
│ │ ├── tcpao.uts
│ │ ├── tcpros.uts
│ │ ├── tzsp.uts
│ │ ├── vqp.uts
│ │ ├── vtp.uts
│ │ └── wireguard.uts
│ ├── fields.uts
│ ├── imports.uts
│ ├── linux.uts
│ ├── nmap.uts
│ ├── p0f.uts
│ ├── p0fv2.uts
│ ├── pcaps/
│ │ ├── bad_rsn_parsing_overrides_ssid.pcap
│ │ ├── doip_ack.pcap
│ │ ├── http2_h2c.pcap
│ │ ├── http_compressed-brotli.pcap
│ │ ├── http_compressed-zstd.pcap
│ │ ├── http_compressed.pcap
│ │ ├── http_content_length.pcap
│ │ ├── ikev2_nat_t.pcapng
│ │ ├── ikev2_notify_redirect.pcap
│ │ ├── ipfix.pcap
│ │ ├── netflowv9.pcap
│ │ ├── pfcp.pcap
│ │ ├── ssh_ed25519.pcap
│ │ ├── tls_new-session-ticket.pcap
│ │ ├── zigbee-join-authenticate.pcap
│ │ └── zigbee-transport-key-skke_1.pcap
│ ├── pipetool.uts
│ ├── random.uts
│ ├── regression.uts
│ ├── run_tests
│ ├── run_tests.bat
│ ├── scapy/
│ │ ├── automaton.uts
│ │ └── layers/
│ │ ├── asn1.uts
│ │ ├── bluetooth.uts
│ │ ├── bluetooth4LE.uts
│ │ ├── can.uts
│ │ ├── cbor.uts
│ │ ├── dcerpc.uts
│ │ ├── dhcp.uts
│ │ ├── dhcp6.uts
│ │ ├── dns.uts
│ │ ├── dns_dnssec.uts
│ │ ├── dns_edns0.uts
│ │ ├── dot11.uts
│ │ ├── dot15d4.uts
│ │ ├── eap.uts
│ │ ├── hsrp.uts
│ │ ├── http.uts
│ │ ├── inet.uts
│ │ ├── inet6.uts
│ │ ├── ipsec.uts
│ │ ├── isakmp.uts
│ │ ├── kerberos.uts
│ │ ├── l2.uts
│ │ ├── l2tp.uts
│ │ ├── ldap.uts
│ │ ├── ldapopenldap.uts
│ │ ├── llmnr.uts
│ │ ├── lltd.uts
│ │ ├── mgcp.uts
│ │ ├── mobileip.uts
│ │ ├── msnrtp.uts
│ │ ├── msrpce/
│ │ │ ├── mgmt.uts
│ │ │ ├── msdrsr.uts
│ │ │ ├── mslsad.uts
│ │ │ ├── msnrpc.uts
│ │ │ ├── msscmr.uts
│ │ │ └── mswmi.uts
│ │ ├── netbios.uts
│ │ ├── netflow.uts
│ │ ├── ntlm.uts
│ │ ├── ntp.uts
│ │ ├── pflog.uts
│ │ ├── ppp.uts
│ │ ├── pptp.uts
│ │ ├── quic.uts
│ │ ├── radius.uts
│ │ ├── rip.uts
│ │ ├── rtp.uts
│ │ ├── sctp.uts
│ │ ├── skinny.uts
│ │ ├── smb.uts
│ │ ├── smb2.uts
│ │ ├── smbclientserver.uts
│ │ ├── snmp.uts
│ │ ├── spnego.uts
│ │ ├── ssh.uts
│ │ ├── tftp.uts
│ │ ├── tls/
│ │ │ ├── __init__.py
│ │ │ ├── cert.uts
│ │ │ ├── example_client.py
│ │ │ ├── example_server.py
│ │ │ ├── pki/
│ │ │ │ ├── README.md
│ │ │ │ ├── ca_cert.pem
│ │ │ │ ├── ca_key.pem
│ │ │ │ ├── cli_cert.pem
│ │ │ │ ├── cli_key.pem
│ │ │ │ ├── srv_cert.pem
│ │ │ │ ├── srv_cert_ed25519.pem
│ │ │ │ ├── srv_key.pem
│ │ │ │ └── srv_key_ed25519.pem
│ │ │ ├── sslv2.uts
│ │ │ ├── tls.uts
│ │ │ ├── tls13.uts
│ │ │ └── tlsclientserver.uts
│ │ ├── usb.uts
│ │ ├── vrrp.uts
│ │ ├── vxlan.uts
│ │ └── x509.uts
│ ├── sendsniff.uts
│ ├── testsocket.py
│ ├── tools/
│ │ ├── isotpscanner.uts
│ │ ├── obdscanner.uts
│ │ └── xcpscanner.uts
│ ├── tuntap.uts
│ └── windows.uts
└── tox.ini
================================================
FILE CONTENTS
================================================
================================================
FILE: .config/ci/install.ps1
================================================
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Install packages needed for the CI on Windows
# Install npcap and windump
& "$PSScriptRoot\windows\InstallNpcap.ps1"
& "$PSScriptRoot\windows\InstallWindumpNpcap.ps1"
# Install wireshark
choco install -y wireshark
# Add to PATH
echo "C:\Program Files\Wireshark;C:\Program Files\Windump" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
# Update pip & setuptools & wheel (tox uses those)
python -m pip install --upgrade pip setuptools wheel --ignore-installed
# Make sure tox is installed and up to date
python -m pip install -U tox --ignore-installed
================================================
FILE: .config/ci/install.sh
================================================
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Install packages needed for the CI on Linux/MacOS
# Usage:
# ./install.sh [install mode]
# Detect install mode
if [[ "${1}" == "libpcap" ]]
then
SCAPY_USE_LIBPCAP="yes"
if [[ ! -z "$GITHUB_ACTIONS" ]]
then
echo "SCAPY_USE_LIBPCAP=yes" >> $GITHUB_ENV
fi
fi
# Install on osx
if [ "${OSTYPE:0:6}" = "darwin" ]
then
if [ ! -z $SCAPY_USE_LIBPCAP ]
then
brew update
brew install libpcap
fi
fi
CUR=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
# Install wireshark data, ifconfig, vcan, samba, openldap
if [ "$OSTYPE" = "linux-gnu" ]
then
sudo apt-get update
sudo apt-get -qy install tshark net-tools || exit 1
sudo apt-get -qy install can-utils || exit 1
sudo apt-get -qy install linux-modules-extra-$(uname -r) || exit 1
sudo apt-get -qy install samba smbclient
sudo bash $CUR/openldap/install.sh
# Make sure libpcap is installed
if [ ! -z $SCAPY_USE_LIBPCAP ]
then
sudo apt-get -qy install libpcap-dev || exit 1
fi
fi
# Update pip & setuptools (tox uses those)
python -m pip install --upgrade pip setuptools wheel --ignore-installed
# Make sure tox is installed and up to date
python -m pip install -U tox --ignore-installed
# Dump Environment (so that we can check PATH, UT_FLAGS, etc.)
set
================================================
FILE: .config/ci/openldap/config.ldif
================================================
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# Contains the configuration of our OpenLDAP test server
# Configure LDAPS
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: {{CAFILE}}
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: {{KEYFILE}}
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: {{CRTFILE}}
dn: cn=config
changetype: modify
add: olcTLSVerifyClient
olcTLSVerifyClient: never
# Set channel bindings to 'tls-endpoint', like it would be on Windows
dn: cn=config
changetype: modify
replace: olcSaslCbinding
olcSaslCbinding: tls-endpoint
================================================
FILE: .config/ci/openldap/install.sh
================================================
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Install an OpenLDAP test server
# Pre-populate some setup questions
sudo debconf-set-selections <<< 'slapd slapd/password2 password Bonjour1'
sudo debconf-set-selections <<< 'slapd slapd/password1 password Bonjour1'
sudo debconf-set-selections <<< 'slapd slapd/domain string scapy.net'
# Run setup
sudo apt-get -qy install slapd
# Enable LDAPs
echo "Enabling HTTPS on slapd..."
sudo sed -i '/^SLAPD_SERVICES/ c\SLAPD_SERVICES="ldap:/// ldapi:/// ldaps://"' /etc/default/slapd
sudo systemctl restart slapd
# Calculate the paths we're going to need.
CUR=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
PKIPATH=$(realpath "$CUR/../../../test/scapy/layers/tls/pki")
OLDAPPATH=$(mktemp -d -t scapy_openldap_XXXX)
# Copy certificates to temp path
cp ${PKIPATH}/ca_cert.pem ${OLDAPPATH}
cp ${PKIPATH}/srv_cert.pem ${OLDAPPATH}
cp ${PKIPATH}/srv_key.pem ${OLDAPPATH}
chmod a+rx -R ${OLDAPPATH}
# Copy config template and replace variables.
echo "Creating OpenLDAP config..."
openldap_conf=${OLDAPPATH}/openldap_config.ldif
cp $CUR/config.ldif $openldap_conf
sed -i "s@{{CAFILE}}@${OLDAPPATH}/ca_cert.pem@g" $openldap_conf
sed -i "s@{{CRTFILE}}@${OLDAPPATH}/srv_cert.pem@g" $openldap_conf
sed -i "s@{{KEYFILE}}@${OLDAPPATH}/srv_key.pem@g" $openldap_conf
echo "Applying OpenLDAP config..."
sudo ldapmodify -Y EXTERNAL -H "ldapi:///" -w Bonjour1 -f $openldap_conf -c
echo "Adding initial dummy data..."
sudo ldapadd -D "cn=admin,dc=scapy,dc=net" -w Bonjour1 -H "ldapi:///" -f $CUR/testdata.ldif -c
================================================
FILE: .config/ci/openldap/testdata.ldif
================================================
# SPDX-License-Identifier: OLDAP-2.8
# This file is based on https://git.openldap.org/openldap/openldap/-/blob/master/tests/data/ppolicy.ldif?ref_type=heads
# (renamed to dc=scapy, dc=net)
dn: dc=scapy, dc=net
objectClass: top
objectClass: organization
objectClass: dcObject
o: Scapy
dc: scapy
dn: ou=People, dc=scapy, dc=net
objectClass: top
objectClass: organizationalUnit
ou: People
dn: ou=Groups, dc=scapy, dc=net
objectClass: organizationalUnit
ou: Groups
dn: cn=Policy Group, ou=Groups, dc=scapy, dc=net
objectClass: groupOfNames
cn: Policy Group
member: uid=nd, ou=People, dc=scapy, dc=net
owner: uid=ndadmin, ou=People, dc=scapy, dc=net
dn: cn=Test Group, ou=Groups, dc=scapy, dc=net
objectClass: groupOfNames
cn: Policy Group
member: uid=another, ou=People, dc=scapy, dc=net
dn: ou=Policies, dc=scapy, dc=net
objectClass: top
objectClass: organizationalUnit
ou: Policies
dn: uid=nd, ou=People, dc=scapy, dc=net
objectClass: top
objectClass: person
objectClass: inetOrgPerson
cn: Neil Dunbar
uid: nd
sn: Dunbar
givenName: Neil
userPassword: testpassword
dn: uid=ndadmin, ou=People, dc=scapy, dc=net
objectClass: top
objectClass: person
objectClass: inetOrgPerson
cn: Neil Dunbar (Admin)
uid: ndadmin
sn: Dunbar
givenName: Neil
userPassword: testpw
dn: uid=another, ou=People, dc=scapy, dc=net
objectClass: top
objectClass: person
objectClass: inetOrgPerson
cn: Another Test
uid: another
sn: Test
givenName: Another
userPassword: testing
================================================
FILE: .config/ci/openssl.py
================================================
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Copyright (C) Gabriel Potter
"""
Create a duplicate of the OpenSSL config to be able to use TLS < 1.2
This returns the path to this new config file.
"""
import os
import re
import subprocess
import tempfile
# Get OpenSSL config file
OPENSSL_DIR = re.search(
b"OPENSSLDIR: \"(.*)\"",
subprocess.Popen(
["openssl", "version", "-d"],
stdout=subprocess.PIPE
).communicate()[0]
).group(1).decode()
OPENSSL_CONFIG = os.path.join(OPENSSL_DIR, 'openssl.cnf')
# https://www.openssl.org/docs/manmaster/man5/config.html
DATA = b"""
openssl_conf = openssl_init
[openssl_init]
ssl_conf = ssl_configuration
[ssl_configuration]
system_default = tls_system_default
[tls_system_default]
MinProtocol = TLSv1
CipherString = DEFAULT:@SECLEVEL=0
Options = UnsafeLegacyRenegotiation
""".strip()
# Copy and edit
with tempfile.NamedTemporaryFile(suffix=".cnf", delete=False) as fd:
fd.write(DATA)
print(fd.name)
================================================
FILE: .config/ci/test.ps1
================================================
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# test.ps1
# Usage:
# ./test.ps1 <python version>
# Examples:
# ./test.sh 3.13
if ($args.Count -eq 0) {
Write-Host "Usage: .\test.ps1 <pythonversion>"
exit
}
# Set TOXENV
$PY_VERSION = "py" + ($args[0] -replace '\.', '')
$env:TOXENV = $PY_VERSION + "-windows-root"
if ($env:GITHUB_ACTIONS) {
# Due to a security policy, the firewall of the Azure runner
# (Standard_DS2_v2) that runs Github Actions on Linux blocks ICMP.
$env:UT_FLAGS += " -K icmp_firewall"
}
# Launch Scapy unit tests
python -m tox -- @($env:UT_FLAGS.Trim() -split ' ')
================================================
FILE: .config/ci/test.sh
================================================
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# test.sh
# Usage:
# ./test.sh [python version] [both/root/non_root (default root)]
# Examples:
# ./test.sh 3.7 both
# ./test.sh 3.9 non_root
if [ "$OSTYPE" = "linux-gnu" ]
then
# Linux
OSTOX="linux"
UT_FLAGS+=" -K tshark"
if [ -z "$SIMPLE_TESTS" ]
then
# check vcan
sudo modprobe -n -v vcan
if [[ $? -ne 0 ]]
then
# The vcan module is currently unavailable on xenial builds
UT_FLAGS+=" -K vcan_socket"
fi
else
UT_FLAGS+=" -K vcan_socket"
fi
elif [[ "$OSTYPE" = "darwin"* ]] || [[ "$OSTYPE" = "FreeBSD" ]] || [[ "$OSTYPE" = *"bsd"* ]]
then
OSTOX="bsd"
# Travis CI in macOS 10.13+ can't load kexts. Need this for tuntaposx.
UT_FLAGS+=" -K tun -K tap"
if [[ "$OSTYPE" = "openbsd"* ]]
then
# Note: LibreSSL 3.6.* does not support X25519 according to
# the cryptogaphy module source code
UT_FLAGS+=" -K libressl"
fi
fi
if [ ! -z "$GITHUB_ACTIONS" ]
then
# Due to a security policy, the firewall of the Azure runner
# (Standard_DS2_v2) that runs Github Actions on Linux blocks ICMP.
UT_FLAGS+=" -K icmp_firewall"
fi
# pypy
if python --version 2>&1 | grep -q PyPy
then
UT_FLAGS+=" -K not_pypy"
# Code coverage with PyPy makes it very, very slow. Tests work
# but take around 30minutes, so we disable it.
export DISABLE_COVERAGE=" "
fi
# macos -k scanner has glitchy coverage. skip it
if [ "$OSTOX" = "bsd" ] && [[ "$UT_FLAGS" = *"-k scanner"* ]]; then
export DISABLE_COVERAGE=" "
fi
# libpcap
if [[ ! -z "$SCAPY_USE_LIBPCAP" ]]; then
UT_FLAGS+=" -K veth"
fi
# Create version tag (github actions)
PY_VERSION="py${1//./}"
PY_VERSION=${PY_VERSION/pypypy/pypy}
TESTVER="$PY_VERSION-$OSTOX"
# Chose whether to run root or non_root
SCAPY_TOX_CHOSEN=${2}
if [ "${SCAPY_TOX_CHOSEN}" == "" ]
then
case ${PY_VERSION} in
py27|py38)
SCAPY_TOX_CHOSEN="both"
;;
*)
SCAPY_TOX_CHOSEN="root"
esac
fi
if [ -z $TOXENV ]
then
case ${SCAPY_TOX_CHOSEN} in
both)
export TOXENV="${TESTVER}-non_root,${TESTVER}-root"
;;
root)
export TOXENV="${TESTVER}-root"
;;
*)
export TOXENV="${TESTVER}-non_root"
;;
esac
fi
# Configure OpenSSL
export OPENSSL_CONF=$(${PYTHON:=python} `dirname $BASH_SOURCE`/openssl.py)
# Dump vars (environment is already entirely dumped in install.sh)
echo OSTOX=$OSTOX
echo UT_FLAGS=$UT_FLAGS
echo TOXENV=$TOXENV
echo OPENSSL_CONF=$OPENSSL_CONF
echo OPENSSL_VER=$(openssl version)
echo COVERAGE=$([ -z "$DISABLE_COVERAGE" ] && echo "enabled" || echo "disabled")
if [ "$OSTYPE" = "linux-gnu" ]
then
echo SMBCLIENT=$(smbclient -V)
fi
# Launch Scapy unit tests
# export TOX_PARALLEL_NO_SPINNER=1
tox -- ${UT_FLAGS} || exit 1
# Stop if NO_BASH_TESTS is set
if [ ! -z "$SIMPLE_TESTS" ]
then
exit $?
fi
# Start Scapy in interactive mode
TEMPFILE=$(mktemp)
cat <<EOF > "${TEMPFILE}"
print("Scapy on %s" % sys.version)
sys.exit()
EOF
echo "DEBUG: TEMPFILE=${TEMPFILE}"
./run_scapy -H -c "${TEMPFILE}" || exit 1
================================================
FILE: .config/ci/windows/InstallNpcap.ps1
================================================
# Install Npcap on the machine.
# Config:
$npcap_oem_file = "npcap-1.60-oem.exe"
$npcap_oem_hash = "91e076eb9a197d55ca5e05b240e8049cd97ced3455eb7e7cb0f06066b423eb77"
# Note: because we need the /S option (silent), this script has two cases:
# - The script is runned from a master build, then use the secure variable 'npcap_oem_key' which will be available
# to decode the very recent npcap install oem file and use it
# - The script is runned from a PR, then use the provided archived 0.96 version, which is the last public one to
# provide support for the /S option
function checkTheSum($file, $hash) {
$_chksum = $(CertUtil -hashfile $file SHA256)[1] -replace " ",""
if ($_chksum -ne $hash){
Write-Error "Checksums do NOT match !"
return 1, $file
}
return 0, $file
}
function DownloadNPCAP_free {
$file = $PSScriptRoot+"\npcap-0.96.exe"
$hash = "83667e1306fdcf7f9967c10277b36b87e50ee8812e1ee2bb9443bdd065dc04a1"
# Download the 0.96 file from a copy :/ It was taken down from official servers.
Invoke-WebRequest "https://github.com/secdev/secdev.github.io/raw/refs/heads/master/public/ci/npcap-0.96.exe" -UseBasicParsing -OutFile $file
return checkTheSum $file $hash
}
function DownloadNPCAP_oem {
# Unpack the key
$user, $pass = (Get-ChildItem Env:npcap_oem_key).Value.replace("`"", "").split(",")
if(!$user -Or !$pass){
Throw (New-Object System.Exception)
}
$file = $PSScriptRoot+"\"+$npcap_oem_file
# Download oem file using (super) secret credentials
$pair = "${user}:${pass}"
$encodedCreds = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($pair))
$basicAuthValue = "Basic $encodedCreds"
$headers = @{ Authorization = $basicAuthValue }
$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($user, $secpasswd)
try {
Invoke-WebRequest -uri (-join("https://npcap.com/oem/dist/",$npcap_oem_file)) -OutFile $file -Headers $headers -Credential $credential
} catch [System.Net.WebException],[System.IO.IOException] {
Write-Error "Error while dowloading npcap oem!"
Write-Warning $Error[0]
return 1, $file
}
return checkTheSum $file $npcap_oem_hash
}
if (Test-Path Env:npcap_oem_key){ # Key is here: on master
$success, $file = DownloadNPCAP_oem
if ($success -ne 0){
$success, $file = DownloadNPCAP_free
}
} else { # No key: PRs
$success, $file = DownloadNPCAP_free
}
if ($success -ne 0){
Write-Error ('Npcap installation of '+$file+' arborted !')
exit 1
}
Write-Output ('Installing: ' + $file)
# Run installer
$process = Start-Process $file -ArgumentList "/loopback_support=yes /winpcap_mode=no /S" -PassThru -Wait
if($process.ExitCode -eq 0) {
echo "Npcap installation completed !"
exit 0
} else {
Write-Error "Npcap installation failed !"
exit 1
}
================================================
FILE: .config/ci/windows/InstallWindumpNpcap.ps1
================================================
# Config
$urlPath = "https://github.com/hsluoyz/WinDump/releases/download/v0.3/WinDump-for-Npcap-0.3.zip"
$checksum = "4253cbc494416c4917920e1f2424cdf039af8bc39f839a47aa4337bd28f4eb7e"
############
############
# Download the file
Invoke-WebRequest $urlPath -UseBasicParsing -OutFile $PSScriptRoot"\npcap.zip"
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
param([string]$zipfile, [string]$outpath)
[System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
Unzip $PSScriptRoot"\npcap.zip" $PSScriptRoot"\npcap"
Remove-Item $PSScriptRoot"\npcap.zip"
# Now let's check its checksum
$_chksum = $(CertUtil -hashfile $PSScriptRoot"\npcap\x64\WinDump.exe" SHA256)[1] -replace " ",""
if ($_chksum -ne $checksum){
echo "Checksums does NOT match !"
exit
} else {
echo "Checksums matches !"
}
# Finally, move it and remove tmp files
New-Item -Path "C:\Program Files\Windump" -ItemType directory
Move-Item -Force $PSScriptRoot"\npcap\x64\WinDump.exe" "C:\Program Files\Windump\windump.exe"
Remove-Item $PSScriptRoot"\npcap" -recurse
================================================
FILE: .config/ci/zipapp.sh
================================================
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Build a zipapp for Scapy
DIR=$(realpath "$(dirname "$0")/../../")
cd $DIR
if [ ! -e "pyproject.toml" ]; then
echo "zipapp.sh was not able to find scapy's root folder"
exit 1
fi
MODE="$1"
if [ -z "$MODE" ] || ( [ "$MODE" != "full" ] && [ "$MODE" != "simple" ] ); then
echo "Usage: zipapp.sh <simple/full>"
exit 1
fi
if [ -z "$PYTHON" ]
then
PYTHON=${PYTHON:-python3}
fi
# Get Scapy version
SCPY_VERSION=$(python3 -c "print(__import__('scapy').__version__)")
# Get temp directory
TMPFLD="$(mktemp -d)"
if [ -z "$TMPFLD" ] || [ ! -d "$TMPFLD" ]; then
echo "Error: 'mktemp -d' failed"
exit 1
fi
ARCH="$TMPFLD/archive"
SCPY="$TMPFLD/scapy"
mkdir "$ARCH"
mkdir "$SCPY"
# Create git archive
echo "> Creating git archive..."
git archive HEAD -o "$ARCH/scapy.tar.gz"
# Unpack the archive to a temporary directory
if [ ! -e "$ARCH/scapy.tar.gz" ]; then
echo "ERROR: git archive failed"
exit 1
fi
echo "> Unpacking..."
tar -xf "$ARCH/scapy.tar.gz" -C "$SCPY"
# Remove unnecessary files
echo "> Stripping down..."
cd "$SCPY" && find . -not \( \
-wholename "./scapy*" -o \
-wholename "./pyproject.toml" -o \
-wholename "./doc/scapy.1" -o \
-wholename "./setup.py" -o \
-wholename "./README.md" -o \
-wholename "./LICENSE" \
\) -delete
cd $DIR
# Depending on the mode, install dependencies and get DEST file
if [ "$MODE" == "full" ]; then
echo "> Bundling dependencies..."
$PYTHON -m pip install --quiet --target "$SCPY" IPython
DEST="./dist/scapy-full-$SCPY_VERSION.pyz"
else
DEST="./dist/scapy-$SCPY_VERSION.pyz"
fi
if [ ! -d "./dist" ]; then
mkdir dist
fi
# Copy version
echo "$SCPY_VERSION" > "./dist/version"
# Build the zipapp
echo "> Building zipapp..."
$PYTHON -m zipapp \
-o "$DEST" \
-p "/usr/bin/env python3" \
-m "scapy.main:interact" \
-c \
"$SCPY"
# Cleanup
rm -rf "$TMPFLD"
echo "Success. zipapp avaiable at $DEST"
stat $DEST | head -n 2
================================================
FILE: .config/codespell_ignore.txt
================================================
abd
aci
ans
applikation
archtypes
ba
browseable
byteorder
cace
cas
ciph
componet
comversion
cros
delt
doas
doubleclick
ether
eventtypes
fo
funktion
gost
hart
iff
implementors
inout
interaktive
joinin
merchantibility
microsof
mitre
nd
negociate
optiona
ot
potatoe
referer
requestor
ro
ser
singl
slac
synching
te
temporaere
tim
ue
uint
vas
wan
wanna
webp
widgits
================================================
FILE: .config/mypy/mypy.ini
================================================
[mypy]
# Internal Scapy modules that we ignore
[mypy-scapy.libs.winpcapy]
ignore_errors = True
ignore_missing_imports = True
[mypy-scapy.libs.rfc3961]
warn_return_any = False
# Layers specific config
[mypy-scapy.arch.*]
implicit_reexport = True
[mypy-scapy.layers.*,scapy.contrib.*]
warn_return_any = False
# External libraries that we ignore
[mypy-IPython]
ignore_missing_imports = True
[mypy-colorama]
ignore_missing_imports = True
[mypy-traitlets.config.loader]
ignore_missing_imports = True
[mypy-pyx]
ignore_missing_imports = True
[mypy-matplotlib.lines]
ignore_missing_imports = True
[mypy-prompt_toolkit.*]
ignore_missing_imports = True
================================================
FILE: .config/mypy/mypy_check.py
================================================
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Copyright (C) Gabriel Potter <gabriel[]potter[]fr>
"""
Performs Static typing checks over Scapy's codebase
"""
# IMPORTANT NOTE
#
# Because we are rolling out mypy tests progressively,
# we currently use --follow-imports=skip. This means that
# mypy doesn't check consistency between the imports (different files).
#
# Once each file has been processed individually, we'll remove that to
# check the inconsistencies across the files
import io
import os
import sys
from mypy.main import main as mypy_main
# Check platform arg
PLATFORM = None
if len(sys.argv) >= 2:
if len(sys.argv) > 2:
print("Usage: mypy_check.py [platform]")
sys.exit(1)
PLATFORM = sys.argv[1]
# Load files
localdir = os.path.split(__file__)[0]
with io.open(os.path.join(localdir, "mypy_enabled.txt")) as fd:
FILES = [l.strip() for l in fd.readlines() if l.strip() and l[0] != "#"]
if not FILES:
print("No files specified. Arborting")
sys.exit(1)
# Generate mypy arguments
ARGS = [
# strictness: same as --strict minus --disallow-subclassing-any
"--warn-unused-configs",
"--disallow-any-generics",
"--disallow-untyped-calls",
"--disallow-untyped-defs",
"--disallow-incomplete-defs",
"--check-untyped-defs",
"--disallow-untyped-decorators",
"--no-implicit-optional",
"--warn-redundant-casts",
"--warn-unused-ignores",
"--warn-return-any",
"--no-implicit-reexport",
"--strict-equality",
"--ignore-missing-imports",
# config
"--follow-imports=skip", # Remove eventually
"--config-file=" + os.path.abspath(os.path.join(localdir, "mypy.ini")),
"--show-traceback",
] + (["--platform=" + PLATFORM] if PLATFORM else [])
if PLATFORM.startswith("linux"):
ARGS.extend(
[
"--always-true=LINUX",
"--always-false=OPENBSD",
"--always-false=FREEBSD",
"--always-false=NETBSD",
"--always-false=DARWIN",
"--always-false=WINDOWS",
"--always-false=BSD",
]
)
FILES = [x for x in FILES if not x.startswith("scapy/arch/windows")]
elif PLATFORM.startswith("win32"):
ARGS.extend(
[
"--always-false=LINUX",
"--always-false=OPENBSD",
"--always-false=FREEBSD",
"--always-false=NETBSD",
"--always-false=DARWIN",
"--always-true=WINDOWS",
"--always-false=WINDOWS_XP",
"--always-false=BSD",
]
)
FILES = [
x
for x in FILES
if (
x
not in {
# Disabled on Windows
"scapy/arch/unix.py",
"scapy/arch/solaris.py",
"scapy/contrib/cansocket_native.py",
"scapy/contrib/isotp/isotp_native_socket.py",
}
)
and not x.startswith("scapy/arch/bpf")
and not x.startswith("scapy/arch/linux")
]
else:
raise ValueError("Unknown platform")
# Run mypy over the files
ARGS += [os.path.abspath(f) for f in FILES]
mypy_main(args=ARGS)
================================================
FILE: .config/mypy/mypy_deployment_stats.py
================================================
# SPDX-License-Identifier: GPL-2.0-only
# This file is part of Scapy
# See https://scapy.net/ for more information
# Copyright (C) Gabriel Potter <gabriel[]potter[]fr>
"""
Generate MyPy deployment stats
"""
import os
import io
import glob
from collections import defaultdict
# Parse config file
localdir = os.path.split(__file__)[0]
rootpath = os.path.abspath(os.path.join(localdir, '../../'))
with io.open(os.path.join(localdir, "mypy_enabled.txt")) as fd:
FILES = [l.strip() for l in fd.readlines() if l.strip() and l[0] != "#"]
# Scan Scapy
ALL_FILES = [
"".join(x.partition("scapy/")[2:]) for x in
glob.iglob(os.path.join(rootpath, 'scapy/**/*.py'), recursive=True)
]
# Process
REMAINING = defaultdict(list)
MODULES = defaultdict(lambda: (0, 0, 0, 0))
for f in ALL_FILES:
with open(os.path.join(rootpath, f)) as fd:
lines = len(fd.read().split("\n"))
parts = f.split("/")
if len(parts) > 2:
mod = parts[1]
else:
mod = "[core]"
e, l, t, a = MODULES[mod]
if f in FILES:
e += lines
t += 1
else:
REMAINING[mod].append(f)
l += lines
a += 1
MODULES[mod] = (e, l, t, a)
ENABLED = sum(x[0] for x in MODULES.values())
TOTAL = sum(x[1] for x in MODULES.values())
print("**MyPy Support: %.2f%%**" % (ENABLED / TOTAL * 100))
print("| Module | Typed code (lines) | Typed files |")
print("| --- | --- | --- |")
for mod, dat in MODULES.items():
print("|`%s` | %.2f%% | %s/%s |" % (mod, dat[0] / dat[1] * 100, dat[2], dat[3]))
print()
COREMODS = REMAINING["[core]"]
if COREMODS:
print("Core modules still untypes:")
for mod in COREMODS:
print("- `%s`" % mod)
================================================
FILE: .config/mypy/mypy_enabled.txt
================================================
# This file registers all files that have already been processed as part of
# https://github.com/secdev/scapy/issues/2158, and therefore will be enforced
# with unit tests in future development.
# Style cheet: https://mypy.readthedocs.io/en/latest/cheat_sheet.html
# CORE
scapy/__init__.py
scapy/__main__.py
scapy/all.py
scapy/ansmachine.py
scapy/arch/__init__.py
scapy/arch/bpf/__init__.py
scapy/arch/bpf/consts.py
scapy/arch/bpf/core.py
scapy/arch/bpf/supersocket.py
scapy/arch/common.py
scapy/arch/libpcap.py
scapy/arch/linux/__init__.py
scapy/arch/linux/rtnetlink.py
scapy/arch/solaris.py
scapy/arch/unix.py
scapy/arch/windows/__init__.py
scapy/arch/windows/native.py
scapy/arch/windows/structures.py
scapy/as_resolvers.py
scapy/asn1/__init__.py
scapy/asn1/asn1.py
scapy/asn1/ber.py
scapy/asn1/mib.py
scapy/asn1fields.py
scapy/asn1packet.py
scapy/automaton.py
scapy/autorun.py
scapy/base_classes.py
scapy/compat.py
scapy/config.py
scapy/consts.py
scapy/dadict.py
scapy/data.py
scapy/error.py
scapy/fields.py
scapy/interfaces.py
scapy/main.py
scapy/packet.py
scapy/pipetool.py
scapy/plist.py
scapy/pton_ntop.py
scapy/route.py
scapy/route6.py
scapy/scapypipes.py
scapy/sendrecv.py
scapy/sessions.py
scapy/supersocket.py
scapy/themes.py
scapy/utils.py
scapy/utils6.py
scapy/volatile.py
# LAYERS
scapy/layers/can.py
scapy/layers/l2.py
# CONTRIB
scapy/contrib/automotive/bmw/hsfz.py
scapy/contrib/automotive/doip.py
scapy/contrib/automotive/ecu.py
scapy/contrib/automotive/gm/gmlan_ecu_states.py
scapy/contrib/automotive/gm/gmlan_logging.py
scapy/contrib/automotive/gm/gmlan_scanner.py
scapy/contrib/automotive/gm/gmlanutils.py
scapy/contrib/automotive/kwp.py
scapy/contrib/automotive/obd/scanner.py
scapy/contrib/automotive/scanner/configuration.py
scapy/contrib/automotive/scanner/enumerator.py
scapy/contrib/automotive/scanner/executor.py
scapy/contrib/automotive/scanner/graph.py
scapy/contrib/automotive/scanner/staged_test_case.py
scapy/contrib/automotive/scanner/test_case.py
scapy/contrib/automotive/uds_ecu_states.py
scapy/contrib/automotive/uds_logging.py
scapy/contrib/automotive/uds_scan.py
scapy/contrib/cansocket_native.py
scapy/contrib/cansocket_python_can.py
#scapy/contrib/http2.py # needs to be fixed
scapy/contrib/isotp/isotp_native_socket.py
scapy/contrib/isotp/isotp_packet.py
scapy/contrib/isotp/isotp_scanner.py
scapy/contrib/isotp/isotp_soft_socket.py
scapy/contrib/isotp/isotp_utils.py
scapy/contrib/roce.py
scapy/contrib/tcpao.py
# LIBS
scapy/libs/__init__.py
scapy/libs/ethertypes.py
scapy/libs/extcap.py
scapy/libs/matplot.py
scapy/libs/rfc3961.py
scapy/libs/structures.py
scapy/libs/test_pyx.py
# TEST
test/testsocket.py
# TOOLS
scapy/tools/automotive/isotpscanner.py
================================================
FILE: .git-blame-ignore-revs
================================================
# This file contains the list of commits that should be excluded from
# git blame. Read more informations on:
# https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
# PEPin - https://github.com/secdev/scapy/issues/1277
# E231 - missing whitespace after ','
e7365b2baeded1a0e1e3b59bc0ad14a78d6e3086
# E30* - Incorrect number of blank lines
b770bbc58c26437b354c0bd21dc4e2fcfa3abfdf
# E20* - Incorrect number of whitespace
6861a35d8ed4466df7b2ff82341e60caf9ff869a
# E12* - visual indent
275ad3246b5231bb046a66bcfdf3654d67fdea20
# W29* - useless whitespaces
453f2592f7b6f2b8677619769f8427932894dc1c
# E251 - unexpected spaces around keyword / parameter equals
203254afd771b42ccf0fcca96ba92dc4075cfe4a
# E26 - comments
b7a3db73dfd17ec1e7bbace8d52464982bf8ea8d
# E1 - incorrect indentation
f2f1de742aa36167e2c86247a26ed5e7393366ea
# F821 - undefined name 'name'
f8525ea9f17cedf148febcab8d1dab51ddca9afe
# E2* - whitespaces errors
1c2fe99c131bb05e009896410766371a2f870175
# E71* - tests syntax
927c157b58918d5fdce9714a3c35627339cc8657
# F841 - local variable 'name' is assigned to but never used
dbe409531a22d1245cf4669f72a425b42c83b0db
# PEPin several fixes
93232490193ca2b59e3b1425131913d28f408f7a
# E501 - line too long (> 79 characters)
e89d8965748439adc253714316de7a9a35b8bd73
# F601 - dictionary key repeated with different values
0fd7d76550e56831f887664202d743846d3619dd
# F811 - redefinition of unused variable/class/...
10454d1ca243d0fd8d2ab4a148d688e3ea916e49
# E402 - module level import not at top of file
0f4a904d2801e8bbbc82880345ad453ceb6ee34f
# E722 - do not use bare except
a35575ff22da176a8b515405faea9a689462da0c
# E741 - ambiguous variable name 'l'
7c61676aef950ca268eac480902dd91cb0abe3a4
# F405 - variable/function/... may be undefined, or defined from star
8773983edb0336db7aa84777dee2aa9892508418
# F401 - 'module' imported but unused
a58e1b90a704c394216a0b5a864a50931754bdf7
# W502 - line break before binary operator
9687222c3f0af6ef89ecfe15e5b983e1f7b5b31e
# E275 - Missing whitespace after keyword
08b1f9d67c8e716fd44036a027bdc90dcb9fcfdf
================================================
FILE: .gitattributes
================================================
scapy/__init__.py export-subst
* text=auto
*.bat text eol=crlf
================================================
FILE: .github/FUNDING.yml
================================================
github: [gpotter2, guedou, p-l-, polybassa]
================================================
FILE: .github/ISSUE_TEMPLATE/BUGS.yml
================================================
name: Bug Report
description: File a bug report
body:
- type: markdown
attributes:
value: |
### Things to consider
1. Please check that you are using the **latest Scapy version**, e.g. installed via:
`pip install --upgrade git+https://github.com/secdev/scapy.git`
2. If you are here to ask a question - please check previous issues and online resources, and consider using Gitter instead: <https://gitter.im/secdev/scapy>
3. Please understand that **this is not a forum** but an issue tracker. The following article explains why you should limit questions asked on Github issues: <https://medium.com/@methane/why-you-must-not-ask-questions-on-github-issues-51d741d83fde>
***All bug reports must have at least one reproducible example.*** This may be a code snippet, a pcap file (zipped)..
- type: textarea
id: description
attributes:
label: Brief description
description: |
Describe the main issue in one sentence
If possible, describe what components / protocols could be affected by the issue (e.g. wrpcap() + IPv6, it is likely this also affects XXX)
validations:
required: true
- type: input
id: scapy_ver
attributes:
label: Scapy version
description: Give the Scapy version or the commit hash
placeholder: 2.4.5
validations:
required: true
- type: input
id: py_ver
attributes:
label: Python version
placeholder: "3.8"
validations:
required: true
- type: input
id: os
attributes:
label: Operating system
placeholder: Linux 5.10.46
validations:
required: true
- type: textarea
id: add_os
attributes:
label: Additional environment information
description: If needed - further information to get a picture of your setup (e.g. a sketch of your network setup)
validations:
required: false
- type: textarea
id: reproduce
attributes:
label: How to reproduce
description: Step-by-step explanation or a short script, may reference section 'Related resources'
validations:
required: true
- type: textarea
id: result
attributes:
label: Actual result
description: Dump results that outline the issue, please format your code
- type: textarea
id: expected_result
attributes:
label: Expected result
description: Describe the expected result and outline the difference to the actual one, could also be a screen shot (e.g. wireshark)
- type: textarea
id: resources
attributes:
label: Related resources
description: Traces / sample pcaps (stripped to the relevant frames), related standards, RFCs or other resources
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: Ask a question
url: https://gitter.im/secdev/scapy
about: Please ask and answer questions on Gitter.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- This is just a checklist to guide you. Please remove it if you check all items. -->
**Checklist:**
- [ ] If you are new to Scapy: I have checked [CONTRIBUTING.md](https://github.com/secdev/scapy/blob/master/CONTRIBUTING.md) (esp. section submitting-pull-requests)
- [ ] I squashed commits belonging together
- [ ] I added unit tests or explained why they are not relevant
- [ ] I executed the regression tests (using `tox`)
- [ ] If the PR is still not finished, please create a [Draft Pull Request](https://github.blog/2019-02-14-introducing-draft-pull-requests/)
<!-- brief description what this PR will do, e.g. fixes broken dissection of XXX -->
<!-- if required - short explanation why you fixed something in a way that may look more complicated as it actually is ->>
<!-- if required - outline impacts on other parts of the library -->
fixes #xxx <!-- (add issue number here if appropriate, else remove this line) -->
================================================
FILE: .github/codecov.yml
================================================
codecov:
notify:
# Do not send notifications when CI fails
require_ci_to_pass: true
comment:
# Define codevov comments behavior and content
behavior: default
layout: header, diff, tree
require_changes: false
coverage:
# Define coverage range and precision
precision: 2
range: "70..100"
round: down
status:
# Only consider changes to the whole project
project:
default:
target: auto
threshold: 0.5%
base: auto
patch: false
changes: false
parsers:
gcov:
branch_detection:
conditional: true
loop: true
macro: false
method: false
javascript:
enable_partials: yes
================================================
FILE: .github/workflows/cifuzz.yml
================================================
name: CIFuzz
on:
push:
branches: [master]
permissions:
contents: read
jobs:
Fuzzing:
runs-on: ubuntu-latest
if: github.repository == 'secdev/scapy'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'scapy'
language: python
dry-run: false
allowed-broken-targets-percentage: 0
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'scapy'
language: python
dry-run: false
fuzz-seconds: 300
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
================================================
FILE: .github/workflows/unittests.yml
================================================
name: Scapy unit tests
on:
push:
branches: [master]
pull_request:
# The branches below must be a subset of the branches above
branches: [master]
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/control-the-concurrency-of-workflows-and-jobs
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ !contains(github.ref, 'master')}}
permissions:
contents: read
jobs:
health:
name: Code health check
runs-on: ubuntu-latest
steps:
- name: Checkout Scapy
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install tox
run: pip install tox
- name: Run flake8 tests
run: tox -e flake8
- name: Run codespell
run: tox -e spell
- name: Run twine check
run: tox -e twine
- name: Run gitarchive check
run: tox -e gitarchive
docs:
# 'runs-on' and 'python-version' should match the ones defined in .readthedocs.yml
name: Build doc
runs-on: ubuntu-22.04
steps:
- name: Checkout Scapy
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install tox
run: pip install tox
- name: Build docs
run: tox -e docs
spdx:
name: Check SPDX identifiers
runs-on: ubuntu-latest
steps:
- name: Checkout Scapy
uses: actions/checkout@v4
- name: Launch script
run: bash scapy/tools/check_spdx.sh
mypy:
name: Type hints check
runs-on: ubuntu-latest
steps:
- name: Checkout Scapy
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install tox
run: pip install tox
- name: Run mypy
run: tox -e mypy
utscapy:
name: ${{ matrix.os }} ${{ matrix.installmode }} ${{ matrix.python }} ${{ matrix.mode }} ${{ matrix.flags }}
runs-on: ${{ matrix.os }}
timeout-minutes: 20
continue-on-error: ${{ matrix.allow-failure == 'true' }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
python: ["3.8", "3.9", "3.10", "3.11", "3.12"]
mode: [non_root]
installmode: ['']
flags: [" -K scanner"]
allow-failure: ['false']
include:
# Python 3.7
- os: ubuntu-22.04
python: "3.7"
mode: non_root
flags: " -K scanner"
# Linux root tests on last version
- os: ubuntu-latest
python: "3.13"
mode: root
flags: " -K scanner"
# PyPy tests: root only
- os: ubuntu-latest
python: "pypy3.11"
mode: root
flags: " -K scanner"
# Libpcap test
- os: ubuntu-latest
python: "3.13"
mode: root
installmode: 'libpcap'
flags: " -K scanner"
# macOS tests
- os: macos-14
python: "3.13"
mode: both
flags: " -K scanner"
# windows tests
- os: windows-latest
python: "3.13"
mode: root
flags: " -K scanner"
# Scanner tests
- os: ubuntu-latest
python: "3.13"
mode: root
allow-failure: 'true'
flags: " -k scanner"
- os: ubuntu-latest
python: "pypy3.11"
mode: root
flags: " -k scanner"
- os: macos-14
python: "3.13"
mode: both
allow-failure: 'true'
flags: " -k scanner"
- os: windows-latest
python: "3.13"
mode: both
allow-failure: 'true'
flags: " -k scanner"
steps:
- name: Checkout Scapy
uses: actions/checkout@v4
# Codecov requires a fetch-depth > 1
with:
fetch-depth: 2
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Install Tox and any other packages (linux/osx)
run: ./.config/ci/install.sh ${{ matrix.installmode }}
if: ${{ ! contains(matrix.os, 'windows') }}
- name: Install Tox and any other packages (win)
run: ./.config/ci/install.ps1
if: ${{ contains(matrix.os, 'windows') }}
- name: Run Tox (linux/osx)
run: ./.config/ci/test.sh ${{ matrix.python }} ${{ matrix.mode }}
env:
UT_FLAGS: ${{ matrix.flags }}
if: ${{ ! contains(matrix.os, 'windows') }}
- name: Run Tox (win)
run: ./.config/ci/test.ps1 ${{ matrix.python }}
env:
UT_FLAGS: ${{ matrix.flags }}
if: ${{ contains(matrix.os, 'windows') }}
- name: Codecov
uses: codecov/codecov-action@v5
continue-on-error: true
with:
token: ${{ secrets.CODECOV_TOKEN }}
cryptography:
name: pyca/cryptography test
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install tox
run: pip install tox
# pyca/cryptography's CI installs cryptography
# then runs the tests. We therefore didn't include it in tox
- name: Install cryptography
run: pip install cryptography
- name: Run tests
run: tox -e cryptography
# CODE-QL
analyze:
name: CodeQL analysis
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: 'python'
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .gitignore
================================================
*.pyc
*.pyo
dist/
build/
MANIFEST
*.egg-info/
test/*.html
.coverage*
coverage.xml
.tox
.ipynb_checkpoints
.mypy_cache
.vscode
.DS_Store
[.]venv/
__pycache__/
doc/scapy/_build
doc/scapy/api
.idea
================================================
FILE: .packit.yml
================================================
---
# Docs: https://packit.dev/docs
specfile_path: .packit_rpm/scapy.spec
files_to_sync:
- .packit.yml
- src: .packit_rpm/scapy.spec
dest: scapy.spec
upstream_package_name: scapy
downstream_package_name: scapy
upstream_tag_template: "v{version}"
srpm_build_deps: []
actions:
post-upstream-clone:
# Use the Fedora Rawhide specfile
- "git clone https://src.fedoraproject.org/rpms/scapy .packit_rpm --depth=1"
# Drop the "sources" file so rebase-helper doesn't think we're a dist-git
- "rm -fv .packit_rpm/sources"
# Drop all downstream patches to prevent them from interfering with upstream builds
- "sed -ri '/^Patch[0-9]+\\:.+\\.patch/d' .packit_rpm/scapy.spec"
- "sed -i '/^%check$/apip3 install scapy-rpc\\nOPENSSL_ENABLE_SHA1_SIGNATURES=1 OPENSSL_CONF=$(python3 ./.config/ci/openssl.py) ./test/run_tests -c test/configs/linux.utsc -K ci_only -K netaccess -K scanner' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: can-utils' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: libpcap' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: openssl' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: tcpdump' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: wireshark' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-ipython' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-brotli' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-can' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-cbor2' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-coverage' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-cryptography' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-tkinter' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: python3-zstandard' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: samba' .packit_rpm/scapy.spec"
- "sed -i '/^BuildArch/aBuildRequires: samba-client' .packit_rpm/scapy.spec"
jobs:
- job: copr_build
trigger: pull_request
manual_trigger: true
enable_net: true
targets:
- fedora-latest-stable-aarch64
- fedora-latest-stable-i386
- fedora-latest-stable-ppc64le
- fedora-latest-stable-s390x
- fedora-latest-stable-x86_64
- fedora-rawhide-aarch64
- fedora-rawhide-i386
- fedora-rawhide-ppc64le
- fedora-rawhide-s390x
- fedora-rawhide-x86_64
================================================
FILE: .readthedocs.yml
================================================
# Readthedocs config file.
# See https://docs.readthedocs.io/en/stable/config-file/v2.html#supported-settings
version: 2
sphinx:
configuration: doc/scapy/conf.py
formats:
- epub
- pdf
build:
os: ubuntu-22.04
tools:
python: "3.12"
# To show the correct Scapy version, we must unshallow
# https://docs.readthedocs.io/en/stable/build-customization.html#unshallow-git-clone
jobs:
post_checkout:
- git fetch --unshallow || true
# https://docs.readthedocs.io/en/stable/config-file/v2.html#python
python:
install:
- method: pip
path: .
extra_requirements:
- doc
================================================
FILE: .travis.yml
================================================
language: python
dist: bionic # OpenSSL 1.1.1
cache:
directories:
- $HOME/.cache/pip
- .tox
jobs:
include:
# run custom root tests
# isotp
- os: linux
python: 3.8
env:
- TOXENV=py38-isotp_kernel_module,codecov
install:
- bash .config/ci/install.sh
- python -c "from scapy.all import conf; print(repr(conf))"
script: bash .config/ci/test.sh
================================================
FILE: CONTRIBUTING.md
================================================
# How to contribute
Contributors are essential to Scapy (as they are to most open source
projects). Here is some advice to help you help the project!
## Project objectives
We try to keep Scapy as powerful as possible, to support as many
protocols and platforms as possible, to keep and make the code (and
the commit history) as clean as possible.
Since Scapy can be slow and memory consuming, we try to limit CPU and
memory usage, particularly in parts of the code often called.
## What to contribute
You want to spend time working on Scapy but have no (or little)
idea what to do? You can look for open issues
[labeled "contributions wanted"](https://github.com/secdev/scapy/labels/contributions%20wanted), or look at the [contributions roadmap](https://github.com/secdev/scapy/issues/399)
If you have any ideas of useful contributions that you cannot (or do
not want to) do yourself, open an issue and include
"contributions wanted" in the title.
Once you have chosen a contribution, open an issue to let other people
know you're working on it (or assign the existing issue to yourself)
and track your progress. You might want to ask whether you're working
in an appropriate direction, to avoid the frustration of seeing your
contribution rejected after a lot of work.
## Reporting issues
### Bugs
If you have installed Scapy through a package manager (from your Linux
or BSD system, from PyPI, etc.), please get and install the current
development code, and check that the bug still exists before
submitting an issue.
If you're not sure whether a behavior is a bug or not, submit an issue
and ask, don't be shy!
### Enhancements / feature requests
If you want a feature in Scapy, but cannot implement it yourself or
want some hints on how to do that, open an issue and include
"enhancement" in the title.
Explain if possible the API you would like to have (e.g., give examples
of function calls, packet creations, etc.).
## Submitting pull requests
### Coding style & conventions
- The code should be PEP-8 compliant; you can check your code with
[pep8](https://pypi.python.org/pypi/pep8) and the command `tox -e flake8`
- [Pylint](http://www.pylint.org/) can help you write good Python
code (even if respecting Pylint rules is sometimes either too hard
or even undesirable; human brain needed!).
- [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html)
is a nice read!
- Avoid creating unnecessary `list` objects, particularly if they
can be huge (e.g., when possible, use `for line in fdesc` instead of
`for line in fdesc.readlines()`; more generally prefer generators over
lists).
### Tests
Please consider adding tests for your new features or that trigger the
bug you are fixing. This will prevent a regression from being
unnoticed. Do not use the variable `_` in your tests, as it could break them.
If you find yourself in a situation where your tests locally succeed but
fail if executed on the CI, try to enable the debugging option for the
dissector by setting `conf.debug_dissector = 1`.
### New protocols
New protocols can go either in `scapy/layers` or to
`scapy/contrib`. Protocols in `scapy/layers` should be usually found
on common networks, while protocols in `scapy/contrib` should be
uncommon or specific.
To be precise, `scapy/layers` protocols should not be importing `scapy/contrib`
protocols, whereas `scapy/contrib` protocols may import both `scapy/contrib` and
`scapy/layers` protocols.
The detailed requirements are explained in [Design patterns](https://scapy.readthedocs.io/en/latest/build_dissect.html#design-patterns) on Scapy's doc.
### Features
Protocol-related features should be implemented within the same module
as the protocol layers(s) (e.g., `traceroute()` is implemented in
`scapy/layers/inet.py`).
Other features may be implemented in a module (`scapy/modules`) or a
contribution (`scapy/contrib`).
### Core
If you contribute to Scapy's core (e.g., `scapy/base_classes.py`,
`scapy/packet.py`, etc.), please be very careful with performances and
memory footprint, as it is easy to write Python code that wastes
memory or CPU cycles.
As an example, `Packet().__init__()` is called each time a **layer** is
parsed from a string (during a network capture or a PCAP file
read). Adding inefficient code here will have a disastrous effect on
Scapy's performances.
### Logging
Scapy has an internal logging system based on `logging`.
In the past, Scapy was generally too verbose on packet dissection,
leading many new users to disable all logs, which makes it harder for them
to find real issues afterwards. You should comply with these guidelines to
make sure logging in Scapy remains helpful.
- If you want the log message to only be displayed when using Scapy through
the interactive console, use `scapy.error.log_interactive`. You are free to
use any log level.
- Otherwise, always use `scapy.error.log_runtime`.
- On **packet dissection**, of *packet layers*
you should remain **AT OR BELOW the `logging.INFO` level**, unless the
issue is critical or tied to security.
For instance: "DNS Decompression loop detected !" is allowed as WARNING,
but "Could not dissect packet" or "Invalid value detected" are not.
- On **packet build** or **any command** or function that is called by the
user or the root program, you are **free and welcomed** to use the WARNING
or ERROR levels, to signal that a packet was wrongly built for instance.
- If you are working on Scapy's core, you may use: `scapy.error.log_loading`
only while Scapy is loading, to display import errors for instance.
### Code review
Maintainers tend to be picky, and you might feel frustrated that your
code (which is perfectly working in your use case) is not merged
faster.
Please don't be offended, and keep in mind that maintainers are
concerned about code maintainability and readability, commit history
(we use the history a lot, for example to find regressions or
understand why certain decisions have been made), performances,
integration in Scapy, API consistency (so that someone who knows how
to use Scapy will know how to use your code), etc.
**Thanks for reading, happy hacking!**
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: MANIFEST.in
================================================
include MANIFEST.in
include LICENSE
include run_scapy
prune test
================================================
FILE: README.md
================================================
<!-- start_ppi_description -->
# <img src="https://github.com/secdev/scapy/raw/master/doc/scapy/graphics/scapy_logo.png" width="64" valign="middle" alt="Scapy" /> Scapy
[](https://github.com/secdev/scapy/actions/workflows/unittests.yml?query=event%3Apush) <!-- ignore_ppi -->
[](https://codecov.io/gh/secdev/scapy) <!-- ignore_ppi -->
[](https://app.codacy.com/gh/secdev/scapy/dashboard) <!-- ignore_ppi -->
[](https://pypi.python.org/pypi/scapy/)
[](LICENSE)
[](https://gitter.im/secdev/scapy) <!-- ignore_ppi -->
Scapy is a powerful Python-based interactive packet manipulation program and
library.
It is able to forge or decode packets of a wide number of protocols, send them
on the wire, capture them, store or read them using pcap files, match requests
and replies, and much more. It is designed to allow fast packet prototyping by
using default values that work.
It can easily handle most classical tasks like scanning, tracerouting, probing,
unit tests, attacks or network discovery (it can replace `hping`, 85% of `nmap`,
`arpspoof`, `arp-sk`, `arping`, `tcpdump`, `wireshark`, `p0f`, etc.). It also
performs very well at a lot of other specific tasks that most other tools can't
handle, like sending invalid frames, injecting your own 802.11 frames, combining
techniques (VLAN hopping+ARP cache poisoning, VoIP decoding on WEP protected
channel, ...), etc.
Scapy supports Python 3.7+. It's intended to
be cross platform, and runs on many different platforms (Linux, OSX,
\*BSD, and Windows).
## Getting started
Scapy is usable either as a **shell** or as a **library**.
For further details, please head over to [Getting started with Scapy](https://scapy.readthedocs.io/en/latest/introduction.html), which is part of the documentation.
### Shell demo

Scapy can easily be used as an interactive shell to interact with the network.
The following example shows how to send an ICMP Echo Request message to
`github.com`, then display the reply source IP address:
```python
sudo ./run_scapy
Welcome to Scapy
>>> p = IP(dst="github.com")/ICMP()
>>> r = sr1(p)
Begin emission:
.Finished to send 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
>>> r[IP].src
'192.30.253.113'
```
### Resources
The [documentation](https://scapy.readthedocs.io/en/latest/) contains more
advanced use cases, and examples.
Other useful resources:
- [Scapy in 20 minutes](https://github.com/secdev/scapy/blob/master/doc/notebooks/Scapy%20in%2015%20minutes.ipynb)
- [Interactive tutorial](https://scapy.readthedocs.io/en/latest/usage.html#interactive-tutorial) (part of the documentation)
- [The quick demo: an interactive session](https://scapy.readthedocs.io/en/latest/introduction.html#quick-demo) (some examples may be outdated)
- [HTTP/2 notebook](https://github.com/secdev/scapy/blob/master/doc/notebooks/HTTP_2_Tuto.ipynb)
- [TLS notebooks](https://github.com/secdev/scapy/blob/master/doc/notebooks/tls)
## [Installation](https://scapy.readthedocs.io/en/latest/installation.html)
Scapy works without any external Python modules on Linux and BSD like operating
systems. On Windows, you need to install some mandatory dependencies as
described in [the
documentation](http://scapy.readthedocs.io/en/latest/installation.html#windows).
On most systems, using Scapy is as simple as running the following commands:
```bash
git clone https://github.com/secdev/scapy
cd scapy
./run_scapy
```
To benefit from all Scapy features, such as plotting, you might want to install
Python modules, such as `matplotlib` or `cryptography`. See the
[documentation](http://scapy.readthedocs.io/en/latest/installation.html) and
follow the instructions to install them.
<!-- stop_ppi_description -->
## License
Scapy's code, tests and tools are licensed under GPL v2.
The documentation (everything unless marked otherwise in `doc/`, and except the logo) is licensed under CC BY-NC-SA 2.5.
## Contributing
Want to contribute? Great! Please take a few minutes to
[read this](CONTRIBUTING.md)!
================================================
FILE: doc/LICENSE
================================================
Creative Commons Attribution-NonCommercial-ShareAlike 2.5
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
1. Definitions
a. "Collective Work" means a work, such as a periodical issue, anthology or encyclopedia, in which the Work in its entirety in unmodified form, along with a number of other contributions, constituting separate and independent works in themselves, are assembled into a collective whole. A work that constitutes a Collective Work will not be considered a Derivative Work (as defined below) for the purposes of this License.
b. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works, such as a translation, musical arrangement, dramatization, fictionalization, motion picture version, sound recording, art reproduction, abridgment, condensation, or any other form in which the Work may be recast, transformed, or adapted, except that a work that constitutes a Collective Work will not be considered a Derivative Work for the purpose of this License. For the avoidance of doubt, where the Work is a musical composition or sound recording, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered a Derivative Work for the purpose of this License.
c. "Licensor" means the individual or entity that offers the Work under the terms of this License.
d. "Original Author" means the individual or entity who created the Work.
e. "Work" means the copyrightable work of authorship offered under the terms of this License.
f. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
g. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike.
2. Fair Use Rights. Nothing in this license is intended to reduce, limit, or restrict any rights arising from fair use, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
a. to reproduce the Work, to incorporate the Work into one or more Collective Works, and to reproduce the Work as incorporated in the Collective Works;
b. to create and reproduce Derivative Works;
c. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission the Work including as incorporated in Collective Works;
d. to distribute copies or phonorecords of, display publicly, perform publicly, and perform publicly by means of a digital audio transmission Derivative Works;
The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. All rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Sections 4(e) and 4(f).
4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
a. You may distribute, publicly display, publicly perform, or publicly digitally perform the Work only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy or phonorecord of the Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Work itself to be made subject to the terms of this License. If You create a Collective Work, upon notice from any Licensor You must, to the extent practicable, remove from the Collective Work any credit as required by clause 4(d), as requested. If You create a Derivative Work, upon notice from any Licensor You must, to the extent practicable, remove from the Derivative Work any credit as required by clause 4(d), as requested.
b. You may distribute, publicly display, publicly perform, or publicly digitally perform a Derivative Work only under the terms of this License, a later version of this License with the same License Elements as this License, or a Creative Commons iCommons license that contains the same License Elements as this License (e.g. Attribution-NonCommercial-ShareAlike 2.5 Japan). You must include a copy of, or the Uniform Resource Identifier for, this License or other license specified in the previous sentence with every copy or phonorecord of each Derivative Work You distribute, publicly display, publicly perform, or publicly digitally perform. You may not offer or impose any terms on the Derivative Works that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder, and You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute, publicly display, publicly perform, or publicly digitally perform the Derivative Work with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License Agreement. The above applies to the Derivative Work as incorporated in a Collective Work, but this does not require the Collective Work apart from the Derivative Work itself to be made subject to the terms of this License.
c. You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
d. If you distribute, publicly display, publicly perform, or publicly digitally perform the Work or any Derivative Works or Collective Works, You must keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or (ii) if the Original Author and/or Licensor designate another party or parties (e.g. a sponsor institute, publishing entity, journal) for attribution in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; the title of the Work if supplied; to the extent reasonably practicable, the Uniform Resource Identifier, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and in the case of a Derivative Work, a credit identifying the use of the Work in the Derivative Work (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). Such credit may be implemented in any reasonable manner; provided, however, that in the case of a Derivative Work or Collective Work, at a minimum such credit will appear where any other comparable authorship credit appears and in a manner at least as prominent as such other comparable authorship credit.
e. For the avoidance of doubt, where the Work is a musical composition:
i. Performance Royalties Under Blanket Licenses. Licensor reserves the exclusive right to collect, whether individually or via a performance rights society (e.g. ASCAP, BMI, SESAC), royalties for the public performance or public digital performance (e.g. webcast) of the Work if that performance is primarily intended for or directed toward commercial advantage or private monetary compensation.
ii. Mechanical Rights and Statutory Royalties. Licensor reserves the exclusive right to collect, whether individually or via a music rights agency or designated agent (e.g. Harry Fox Agency), royalties for any phonorecord You create from the Work ("cover version") and distribute, subject to the compulsory license created by 17 USC Section 115 of the US Copyright Act (or the equivalent in other jurisdictions), if Your distribution of such cover version is primarily intended for or directed toward commercial advantage or private monetary compensation.
f. Webcasting Rights and Statutory Royalties. For the avoidance of doubt, where the Work is a sound recording, Licensor reserves the exclusive right to collect, whether individually or via a performance-rights society (e.g. SoundExchange), royalties for the public digital performance (e.g. webcast) of the Work, subject to the compulsory license created by 17 USC Section 114 of the US Copyright Act (or the equivalent in other jurisdictions), if Your public digital performance is primarily intended for or directed toward commercial advantage or private monetary compensation.
5. Representations, Warranties and Disclaimer
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
7. Termination
a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Derivative Works or Collective Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
8. Miscellaneous
a. Each time You distribute or publicly digitally perform the Work or a Collective Work, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
b. Each time You distribute or publicly digitally perform a Derivative Work, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, neither party will use the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time.
Creative Commons may be contacted at http://creativecommons.org/.
================================================
FILE: doc/notebooks/HTTP_2_Tuto.ipynb
================================================
{
"metadata": {
"name": "",
"signature": "sha256:50ffc723dfcf9f5650b542c1b77933eeaa2df6f665494225ce2aba661b86885e"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"HTTP/2 Tutorial"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This tutorial aims at creating an HTTP/2 session using Scapy. The frontpage of Google will be fetched. The favicon will also be loaded as a dependency of the frontpage. Finally, a Google query will be submitted. The first queries will be generated using some Scapy helpers. The last one will be generated by hand, to better illustrate the low level APIs.\n",
"\n",
"This tutorial can be run without any privileges (no root, no CAP_NET_ADMIN, no CAP_NET_RAW). One can select \"Cell -> Run All\" to perform the three queries."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Building the socket"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, we need to build an TLS socket to the HTTP server, and to negotiate the HTTP/2 protocol as the next protocol. Doing so requires a fairly recent version of the Python ssl module. We indeed need support of ALPN (https://www.rfc-editor.org/rfc/rfc7301.txt).\n",
"We build our TCP socket first."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import socket\n",
"dn = 'www.google.fr'\n",
"\n",
"# Get the IP address of a Google HTTP endpoint\n",
"l = socket.getaddrinfo(dn, 443, socket.INADDR_ANY, socket.SOCK_STREAM, socket.IPPROTO_TCP)\n",
"assert len(l) > 0, 'No address found :('\n",
"\n",
"s = socket.socket(l[0][0], l[0][1], l[0][2])\n",
"s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n",
"if hasattr(socket, 'SO_REUSEPORT'):\n",
" s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)\n",
"ip_and_port = l[0][4]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 99
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now build our SSL context and we wrap the previously defined socket in it."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import ssl\n",
"# Testing support for ALPN\n",
"assert(ssl.HAS_ALPN)\n",
"\n",
"# Building the SSL context\n",
"ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)\n",
"ssl_ctx.set_ciphers(':'.join([ # List from ANSSI TLS guide v.1.1 p.51\n",
" 'ECDHE-ECDSA-AES256-GCM-SHA384',\n",
" 'ECDHE-RSA-AES256-GCM-SHA384',\n",
" 'ECDHE-ECDSA-AES128-GCM-SHA256',\n",
" 'ECDHE-RSA-AES128-GCM-SHA256',\n",
" 'ECDHE-ECDSA-AES256-SHA384',\n",
" 'ECDHE-RSA-AES256-SHA384',\n",
" 'ECDHE-ECDSA-AES128-SHA256',\n",
" 'ECDHE-RSA-AES128-SHA256',\n",
" 'ECDHE-ECDSA-CAMELLIA256-SHA384',\n",
" 'ECDHE-RSA-CAMELLIA256-SHA384',\n",
" 'ECDHE-ECDSA-CAMELLIA128-SHA256',\n",
" 'ECDHE-RSA-CAMELLIA128-SHA256',\n",
" 'DHE-RSA-AES256-GCM-SHA384',\n",
" 'DHE-RSA-AES128-GCM-SHA256',\n",
" 'DHE-RSA-AES256-SHA256',\n",
" 'DHE-RSA-AES128-SHA256',\n",
" 'AES256-GCM-SHA384',\n",
" 'AES128-GCM-SHA256',\n",
" 'AES256-SHA256',\n",
" 'AES128-SHA256',\n",
" 'CAMELLIA128-SHA256'\n",
" ])) \n",
"ssl_ctx.set_alpn_protocols(['h2']) # h2 is a RFC7540-hardcoded value\n",
"ssl_sock = ssl_ctx.wrap_socket(s, server_hostname=dn)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 100
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We then connect the socket to the TCP endpoint."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ssl_sock.connect(ip_and_port)\n",
"assert('h2' == ssl_sock.selected_alpn_protocol())"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 101
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Reading the server settings and acknowledging them."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With HTTP/2, the server is the first to talk, sending its settings for the HTTP/2 session. Let's read them. For this, we wrap the TLS connection into a Scapy SuperSocket for easier management."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import scapy.supersocket as supersocket\n",
"import scapy.contrib.http2 as h2\n",
"import scapy.config\n",
"scapy.config.conf.debug_dissector = True\n",
"ss = supersocket.SSLStreamSocket(ssl_sock, basecls=h2.H2Frame)\n",
"srv_set = ss.recv()\n",
"srv_set.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame ]### \n",
" len = 0x12\n",
" type = SetFrm\n",
" flags = set([])\n",
" reserved = 0L\n",
" stream_id = 0L\n",
"###[ HTTP/2 Settings Frame ]### \n",
" \\settings \\\n",
" |###[ HTTP/2 Setting ]### \n",
" | id = Max concurrent streams\n",
" | value = 100\n",
" |###[ HTTP/2 Setting ]### \n",
" | id = Initial window size\n",
" | value = 1048576\n",
" |###[ HTTP/2 Setting ]### \n",
" | id = Max header list size\n",
" | value = 16384\n",
"\n"
]
}
],
"prompt_number": 102
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's make a note of the server settings for later usage.\n",
"We define variables for the server settings. They are assigned the RFC-defined default values. These values are overwritten by the settings provided by the server, if they are provided."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"srv_max_frm_sz = 1<<14\n",
"srv_hdr_tbl_sz = 4096\n",
"srv_max_hdr_tbl_sz = 0\n",
"srv_global_window = 1<<14\n",
"for setting in srv_set.payload.settings:\n",
" if setting.id == h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE:\n",
" srv_hdr_tbl_sz = setting.value\n",
" elif setting.id == h2.H2Setting.SETTINGS_MAX_HEADER_LIST_SIZE:\n",
" srv_max_hdr_lst_sz = setting.value\n",
" elif setting.id == h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE:\n",
" srv_global_window = setting.value"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 103
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"HTTP/2 is a very polite protocol. We need to acknowledge the server settings. For this, we first need to send a constant string, which is a connection preface. This serves the purpose of confirming to the server that the HTTP/2 protocol is understood by the client. Scapy builds the appropriate packet for us to send from this constant string."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import scapy.packet as packet\n",
"\n",
"# We verify that the server window is large enough for us to send some data.\n",
"srv_global_window -= len(h2.H2_CLIENT_CONNECTION_PREFACE)\n",
"assert(srv_global_window >= 0)\n",
"\n",
"ss.send(packet.Raw(h2.H2_CLIENT_CONNECTION_PREFACE))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 104,
"text": [
"24"
]
}
],
"prompt_number": 104
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then, we build the acknowledgment frame and we send our own settings in another frame. We will define very LARGE values (maximum values as defined in the RFC7540, in most cases), just so that we don't end up having to handle window management in this tutorial."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"set_ack = h2.H2Frame(flags={'A'})/h2.H2SettingsFrame()\n",
"set_ack.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame ]### \n",
" len = None\n",
" type = SetFrm\n",
" flags = set(['ACK (A)'])\n",
" reserved = 0\n",
" stream_id = 0\n",
"###[ HTTP/2 Settings Frame ]### \n",
" \\settings \\\n",
"\n"
]
}
],
"prompt_number": 105
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"own_set = h2.H2Frame()/h2.H2SettingsFrame()\n",
"max_frm_sz = (1 << 24) - 1\n",
"max_hdr_tbl_sz = (1 << 16) - 1\n",
"win_sz = (1 << 31) - 1\n",
"own_set.settings = [\n",
" h2.H2Setting(id = h2.H2Setting.SETTINGS_ENABLE_PUSH, value=0),\n",
" h2.H2Setting(id = h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE, value=win_sz),\n",
" h2.H2Setting(id = h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE, value=max_hdr_tbl_sz),\n",
" h2.H2Setting(id = h2.H2Setting.SETTINGS_MAX_FRAME_SIZE, value=max_frm_sz),\n",
"]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 106
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We then send the two frames and then read the acknowledgment of our settings from the server. We set up a loop because the first frames that we may read could be PING frames or window management frames."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h2seq = h2.H2Seq()\n",
"h2seq.frames = [\n",
" set_ack,\n",
" own_set\n",
"]\n",
"# We verify that the server window is large enough for us to send our frames.\n",
"srv_global_window -= len(str(h2seq))\n",
"assert(srv_global_window >= 0)\n",
"ss.send(h2seq)\n",
"\n",
"# Loop until an acknowledgement for our settings is received\n",
"new_frame = None\n",
"while isinstance(new_frame, type(None)) or not (\n",
" new_frame.type == h2.H2SettingsFrame.type_id \n",
" and 'A' in new_frame.flags\n",
" ):\n",
" if not isinstance(new_frame, type(None)):\n",
" # If we received a frame about window management \n",
" if new_frame.type == h2.H2WindowUpdateFrame.type_id:\n",
" # For this tutorial, we don't care about stream-specific windows, but we should :)\n",
" if new_frame.stream_id == 0:\n",
" srv_global_window += new_frame.payload.win_size_incr\n",
" # If we received a Ping frame, we acknowledge the ping, \n",
" # just by setting the ACK flag (A), and sending back the query\n",
" elif new_frame.type == h2.H2PingFrame.type_id:\n",
" new_flags = new_frame.getfieldval('flags')\n",
" new_flags.add('A')\n",
" new_frame.flags = new_flags\n",
" srv_global_window -= len(str(new_frame))\n",
" assert(srv_global_window >= 0)\n",
" ss.send(new_frame)\n",
" else:\n",
" assert new_frame.type != h2.H2ResetFrame.type_id \\\n",
" and new_frame.type != h2.H2GoAwayFrame.type_id, \\\n",
" \"Error received; something is not right!\"\n",
" try:\n",
" new_frame = ss.recv()\n",
" new_frame.show()\n",
" except:\n",
" import time\n",
" time.sleep(1)\n",
" new_frame = None"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame ]### \n",
" len = 0x4\n",
" type = WinFrm\n",
" flags = set([])\n",
" reserved = 0L\n",
" stream_id = 0L\n",
"###[ HTTP/2 Window Update Frame ]### \n",
" reserved = 0L\n",
" win_size_incr= 983041L\n",
"\n",
"###[ HTTP/2 Frame ]### \n",
" len = 0x0\n",
" type = SetFrm\n",
" flags = set(['ACK (A)'])\n",
" reserved = 0L\n",
" stream_id = 0L\n",
"\n"
]
}
],
"prompt_number": 107
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Build the form query with the helpers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are now building a query for the frontpage https://www.google.fr/. We use the HTTP/2 Scapy Module helpers to build this query. The parse_txt_hdrs helper receives various parameters regarding the size of the header blocks and the frame to automatically split the values on multiple frames, if need be. It also receives two callbacks to know which flavour of HPack header encoding we should apply.\n",
"\n",
"We either use the server settings if they were specified or the default values.\n",
"\n",
"You may note that we say that cookies are sensitive, regardless of their content. We would do something a bit smarter, if we knew what is the name of the cookies that are sensitive, and those that are merely informative. In HTTP/2 cookies are split into multiple \"cookie\" headers, while in HTTP/1.1, they are all stored inside the same header.\n",
"\n",
"As the client of this HTTP/2 connection, we need to use odd stream ids, per RFC7540. Since this is the first query, we will use the stream id 1."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"tblhdr = h2.HPackHdrTable()\n",
"qry_frontpage = tblhdr.parse_txt_hdrs(\n",
" ''':method GET\n",
":path /\n",
":authority www.google.fr\n",
":scheme https\n",
"accept-encoding: gzip, deflate\n",
"accept-language: fr-FR\n",
"accept: text/html\n",
"user-agent: Scapy HTTP/2 Module\n",
"''',\n",
" stream_id=1,\n",
" max_frm_sz=srv_max_frm_sz,\n",
" max_hdr_lst_sz=srv_max_hdr_lst_sz,\n",
" is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],\n",
" should_index=lambda x: x in [\n",
" 'x-requested-with', \n",
" 'user-agent', \n",
" 'accept-language',\n",
" ':authority',\n",
" 'accept',\n",
" ]\n",
")\n",
"qry_frontpage.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame Sequence ]### \n",
" \\frames \\\n",
" |###[ HTTP/2 Frame ]### \n",
" | len = None\n",
" | type = HdrsFrm\n",
" | flags = set(['End Stream (ES)', 'End Headers (EH)'])\n",
" | reserved = 0\n",
" | stream_id = 1\n",
" |###[ HTTP/2 Headers Frame ]### \n",
" | \\hdrs \\\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 2\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 4\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 1\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = None\n",
" | | | len = None\n",
" | | | data = 'HPackZString(www.google.fr)'\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 7\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 16\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 17\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = None\n",
" | | | len = None\n",
" | | | data = 'HPackZString(fr-FR)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 19\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = None\n",
" | | | len = None\n",
" | | | data = 'HPackZString(text/html)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 58\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = None\n",
" | | | len = None\n",
" | | | data = 'HPackZString(Scapy HTTP/2 Module)'\n",
"\n"
]
}
],
"prompt_number": 108
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The previous helper updated the HPackHdrTable structure with the headers that should be indexed. We don't need to look inside that table if we only use helpers. For the sake of this tutorial, though, we will."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for i in xrange(max(tblhdr._static_entries.keys()) + 1, max(tblhdr._static_entries.keys()) + 1 + len(tblhdr._dynamic_table)):\n",
" print('Header: {} Value: {}'.format(tblhdr[i].name(), tblhdr[i].value()))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Header: user-agent Value: Scapy HTTP/2 Module\n",
"Header: accept Value: text/html\n",
"Header: accept-language Value: fr-FR\n",
"Header: :authority Value: www.google.fr\n"
]
}
],
"prompt_number": 109
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We also build a query for the favicon."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"qry_icon = tblhdr.parse_txt_hdrs(\n",
" ''':method GET\n",
":path /favicon.ico\n",
":authority www.google.fr\n",
":scheme https\n",
"accept-encoding: gzip, deflate\n",
"accept-language: fr-FR\n",
"accept: image/x-icon; image/vnd.microsoft.icon\n",
"user-agent: Scapy HTTP/2 Module\n",
"''',\n",
" stream_id=3,\n",
" max_frm_sz=srv_max_frm_sz,\n",
" max_hdr_lst_sz=srv_max_hdr_tbl_sz,\n",
" is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],\n",
" should_index=lambda x: x in [\n",
" 'x-requested-with', \n",
" 'user-agent', \n",
" 'accept-language',\n",
" ':authority',\n",
" 'accept',\n",
" ]\n",
")\n",
"qry_icon.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame Sequence ]### \n",
" \\frames \\\n",
" |###[ HTTP/2 Frame ]### \n",
" | len = None\n",
" | type = HdrsFrm\n",
" | flags = set(['End Stream (ES)', 'End Headers (EH)'])\n",
" | reserved = 0\n",
" | stream_id = 3\n",
" |###[ HTTP/2 Headers Frame ]### \n",
" | \\hdrs \\\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 2\n",
" | |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
" | | magic = 0\n",
" | | never_index= Don't Index\n",
" | | index = 4\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = None\n",
" | | | len = None\n",
" | | | data = 'HPackZString(/favicon.ico)'\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 65\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 7\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 16\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 64\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 19\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = None\n",
" | | | len = None\n",
" | | | data = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 63\n",
"\n"
]
}
],
"prompt_number": 110
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You may note that several of the headers that are in common between the two queries (the one for the frontpage and the one for the /favicon.ico) are compressed in the second query. They are only referred to by an index number of the dynamic HPack Header Table.\n",
"We now alter the favicon query to be dependent of the query for the form."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"real_qry_icon = h2.H2Frame(\n",
" stream_id=qry_icon.frames[0][h2.H2Frame].stream_id,\n",
" flags={'+'}.union(qry_icon.frames[0][h2.H2Frame].flags),\n",
") / h2.H2PriorityHeadersFrame(\n",
" hdrs=qry_icon.frames[0][h2.H2HeadersFrame].hdrs,\n",
" stream_dependency=1,\n",
" weight=32,\n",
" exclusive=0\n",
")\n",
"real_qry_icon.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame ]### \n",
" len = None\n",
" type = HdrsFrm\n",
" flags = set(['End Stream (ES)', 'End Headers (EH)', 'Priority (+)'])\n",
" reserved = 0\n",
" stream_id = 3\n",
"###[ HTTP/2 Headers Frame with Priority ]### \n",
" exclusive = 0\n",
" stream_dependency= 1\n",
" weight = 32\n",
" \\hdrs \\\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 2\n",
" |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
" | magic = 0\n",
" | never_index= Don't Index\n",
" | index = 4\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = None\n",
" | | len = None\n",
" | | data = 'HPackZString(/favicon.ico)'\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 65\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 7\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 16\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 64\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 19\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = None\n",
" | | len = None\n",
" | | data = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 63\n",
"\n"
]
}
],
"prompt_number": 111
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can now send both queries to the server."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"h2seq = h2.H2Seq()\n",
"h2seq.frames = [\n",
" qry_frontpage.frames[0],\n",
" real_qry_icon\n",
"]\n",
"srv_global_window -= len(str(h2seq))\n",
"assert(srv_global_window >= 0)\n",
"ss.send(h2seq)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 112,
"text": [
"117"
]
}
],
"prompt_number": 112
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's read the answers!"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# The stream variable will contain all read frames; we will read on until stream 1 and stream 3 are closed by the server.\n",
"stream = h2.H2Seq()\n",
"# Number of streams closed by the server\n",
"closed_stream = 0\n",
"\n",
"new_frame = None\n",
"while True:\n",
" if not isinstance(new_frame, type(None)):\n",
" if new_frame.stream_id in [1, 3]:\n",
" stream.frames.append(new_frame)\n",
" if 'ES' in new_frame.flags:\n",
" closed_stream += 1\n",
" # If we read a PING frame, we acknowledge it by sending the same frame back, with the ACK flag set.\n",
" elif new_frame.stream_id == 0 and new_frame.type == h2.H2PingFrame.type_id:\n",
" new_flags = new_frame.getfieldval('flags')\n",
" new_flags.add('A')\n",
" new_frame.flags = new_flags\n",
" ss.send(new_frame)\n",
" \n",
" # If two streams were closed, we don't need to perform the next operations\n",
" if closed_stream >= 2:\n",
" break\n",
" try:\n",
" new_frame = ss.recv()\n",
" new_frame.show()\n",
" except:\n",
" import time\n",
" time.sleep(1)\n",
" new_frame = None\n",
"\n",
"stream.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"###[ HTTP/2 Frame ]### \n",
" len = 0xe1\n",
" type = HdrsFrm\n",
" flags = set(['End Headers (EH)'])\n",
" reserved = 0L\n",
" stream_id = 3L\n",
"###[ HTTP/2 Headers Frame ]### \n",
" \\hdrs \\\n",
" |###[ HPack Dynamic Size Update ]### \n",
" | magic = 1\n",
" | max_size = 12288\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 8\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 59\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 11\n",
" | | data = 'HPackZString(Accept-Encoding)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 26\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 3\n",
" | | data = 'HPackZString(gzip)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 31\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 9\n",
" | | data = 'HPackZString(image/x-icon)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 33\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 22\n",
" | | data = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 36\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 22\n",
" | | data = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 44\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 22\n",
" | | data = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 0\n",
" | \\hdr_name \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 16\n",
" | | data = 'HPackZString(x-content-type-options)'\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 5\n",
" | | data = 'HPackZString(nosniff)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 54\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 3\n",
" | | data = 'HPackZString(sffe)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 28\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 3\n",
" | | data = 'HPackZString(1494)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 0\n",
" | \\hdr_name \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 12\n",
" | | data = 'HPackZString(x-xss-protection)'\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 10\n",
" | | data = 'HPackZString(1; mode=block)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 24\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 16\n",
" | | data = 'HPackZString(public, max-age=691200)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 21\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 5\n",
" | | data = 'HPackZString(472252)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 0\n",
" | \\hdr_name \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 5\n",
" | | data = 'HPackZString(alt-svc)'\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 28\n",
" | | data = 'HPackZString(quic=\":443\"; ma=2592000; v=\"35,34\")'\n",
"\n",
"###[ HTTP/2 Frame ]### \n",
" len = 0x5d6\n",
" type = DataFrm\n",
" flags = set(['End Stream (ES)'])\n",
" reserved = 0L\n",
" stream_id = 3L\n",
"###[ HTTP/2 Data Frame ]### \n",
" data = '\\x1f\\x8b\\x08\\x00\\x00\\tn\\x88\\x02\\xff\\xbcX{PTU\\x18?\\xa6\\x8d\\x89\\xa5\\xf4G\\xff5\\x13\\xf60\\xffh\\xcc1\\x11\\xc7L\\xb3\\x07>\\xffp\\x94\\x10L\\x1b\\xd3L+kF\\'\\xb5\\x19\\xc7Rg\\xc2\\xb4@KtD _\\x91\\x80\\x8e\\x82\\x8a\\xa8\\x83\\nhI\\xa9\\xa8\\x08B\\x98\\xaf|\\xdf]`\\xc1}\\xb0{\\xf7;\\xbf\\xe6\\\\\\xeee\\xee\\xde\\xbd\\x97\\xdd\\xb5\\xb53\\xf3\\rg\\xcf\\xfd\\xbe\\xefw\\xcew\\xbe\\xd7\\x81\\xb1n\\xec1\\x16\\x1b+\\xfe\\xc6\\xb1y=\\x18\\xeb\\xcf\\x18\\x8b\\x8b\\xeb\\xf8\\x9d\\x1f\\xcbXF\\x0f\\xc6\\x060\\xc6b\\xc5:\\xebXWF\\x0f\\x16r\\x00\\x18DD\\x1b\\x89\\xa8\\x81\\x88\\xbc*\\xd5\\x13Q&\\xe7|\\xa0\\x95\\x1c\\xe7\\xbc\\x17\\x11e!\\xc4 \\xa2\\r\\x00\\x9e0\\x91\\xad\\x10\\xdf}\\xe4\\xc5\\x81\\xbfvb\\xf1\\x91\\x19H\\xd95\\x1c)\\x85\\xc3\\xb1\\xf0P*v\\xd7\\xe5\\xa2]vk:\\x8e\\xebuh\\xb8v\\xd7},(M\\xc1\\x94\\xfc!\\xa6\\x94\\xb17\\x05\\xdcq\\xafs\\x1f\\xday\\x15\\\\\\xbf\\x17\\x0bJ\\xa7*|\\x02s\\xfb\\xf9\\x1fQ{\\xff\\x0c.I\\xd5(\\xac\\xcdF\\xd6\\x8e\\xf1p\\xa4\\x8d\\x86;w.\\xc0\\xb9\\xa2C\\xd8\\x83\\x886\\x89\\xf9\\xeaKg1\\xa1p,\\x92\\x0b\\x87\\xa1N\\xaa\\x0e>\\xf7\\x9d\\x068W%\\xc2\\xf9\\xed[\\xf07\\x9c\\xd0\\xf6\\x90ID\\x8db\\xfe\\xca\\xc9V<]\\xd6\\x84\\xf4\\x0bE\\x96\\xb6k\\xdf\\xb3R\\x91o/I\\xd7\\xe4\\xc5\\xbd\\xf8\\xc4<\\xe6\\xa8\\x8c\\xc7\\xcbd\\x94\\xd8x\\x80\\x8c\\xe07\\x92\\xe7\\xd7E\\x9a\\xbcW\\x93\\xef}\\xacC\\xfe\\xa0=\\x0c\\xf9\\xc2\\xa5z\\xf9\\xcbb\\x1e\\xff\\x87\\x1f1\\xfb\\xbc\\xf8\\xec\\x177\\xc2\\x1d\\xaa\\x8f)w\\xf7\\xd39\\x19\\t\\x93\\xed\\x18\\x96(\\xe1|\\xad\\xcf\\x84\\xd7T~#\\xe7|\\xb0\\x98{\\xbd\\x1c\\xc9\\xb3\\x9a\\x10\\xff\\xb6\\x84\\xd7\\xc7\\xd9\\xb0!\\xc7\\x89s5>\\\\\\xa8\\xf5ac\\xae\\x13\\x93?h\\xc2\\x8d\\x9b~\\xa3\\x8aA\\xaa\\xff\\xe4\\x8a\\x1f\\xf7$B\\xca\\xecfE\\x87\\x19\\xcd_\\xec\\xd0co\\xd2\\xc5L\\x0c\\x11\\x9d\\xd0\\xf6\\x91\\xb7\\xdb\\x8d\\x19\\x9f4c\\xc4x\\x1b\\x86\\x8f\\x910\\xed\\xe3fl/p)\\xdfT\\xd9\\n\\xe1\\xf3\\x86\\xb8\\x8b\\xd1\\xf6\\x11\\xc2fYFYC,\\r\\x16<\\xe2^\\xc4\\xdd\\xaa\\xd4\\xa8\\xfa\\xe9 #\\xbf\\xa3/c\\xe5\\xdd\\x19[\\xde\\xad\\x83B\\r\\x8dO\\xc8\\x08\\xd9\\x01j\\x8eyS\\x9fgb\\xd9C\\x0f\\xce\\xf9S\\x9c\\xf3\\xa9\\xea\\x19\\xaa\\x88H\\xd2\\xe5!I]\\x136H\\x06\\xf0$\\x8b\\xd2\\xe0\\x9c\\xbfHD9D\\xe4\\x8a\\xc0\\x7f]D\\xb4\\x99s\\xfe\\xc2\\x7f\\xc0\\x15\\xb9o\\r\\x11\\xc9x\\xc8\\xa1\\xde\\xf1*c^\\r\\xf3\\xcc5\\x88\\xd2 \\xa2\\xf3\\x00\\x9e\\x0f\\x07[\\xad3\\x92\\x99\\x1e\\xc9y\\x07{\\xeb\\xb7ae\\xf9|\\xcc)\\x1e\\xa7\\xe4\\xd4\\xe4\\x82\\x04\\xcc.J\\xc4\\xb2\\xa3s\\x90W\\xb3\\x01W\\x9b\\x1b\\xac\\xf6p\\x8fs\\xfej\\x18\\xe7\\x0e\\xc2\\xb6\\xb9\\xeeb\\xed\\xefK\\x91T0\\xd4\\xb2\\x86\\xe8\\xe9\\xebcsq\\xa5\\xb9\\xdet\\x0fVvP\\xe3\\xfc\\xa2Q\\xe6\\xe4\\x8d\\xc3\\x98\\xbe{dX\\xb8z\\x12v)\\xae\\xc9\\xb6\\xba\\x8b \\x7f \\xa2\\xef\\x8d\\xbc\\xc5\\r;\"\\xc6\\xd5hf^<\\xfe\\xcc\\x18\\to\\xc5\\x16\\xb3=\\xac2\\xd8\\xfd%\\xa3\\x9fW^/\\xb5\\xd4\\xfd\\xc5\\xc1$l\\xa9NGic!\\x0e]\\xde\\xa5\\xdc\\xfb\\xd2\\xb2\\x8f\\x90\\x94\\x1f\\xaf|_\\xb25\\x017W\\x8f\\xee\\xacKZ]\\xd5\\xc7\\x85>6\\x8d\\xf9U\\xf8\\xd9\\xfb&6\\x9f\\xbbo\"\\xce\\xdc\\xae\\xb4\\xf4\\xf3\\xeb-\\x8d\\xc8/\\x9e\\x8dVC]t\\xadK\\x02\\xf7\\xba\\x8d{\\xd8\\xac\\x9e\\xbd\\x0f\\x11\\x05|\\\\yjm\\x10\\xf6\\xa2\\xc3\\xd3\\xd1\\xe6u\\x84\\x0e6\\xbf\\x0f\\x9e\\x9dK\\x82j\\xb3\\xaf\\xaa (G\\x89<\\xc99O\\xd5\\xaf_ss\\xf4*s\\xe3\\xb5\\xa2\\xb4N\\xecYE\\x89h\\xf1\\xd8\\xc3\\x8ew\\xeey\\xa0\\x9cY\\x8f\\xef\\xce\\x9a\\x19\\xcc\\xc7y\\xb2\\xc8\\xad\\xfa\\xb5\\xef\\xae\\x91\\xd2o\\x08\\xeaW\\xb2\\x1f\\x93\\xf2G\\xa0\\xecJQ\\xc49\\xc7w*?\\xc8\\x06\\xdcq7\\xa8f\\x12\\xd1i\\xfd\\xda\\x98j\\x7f\\'\\xbe\\xa0\\x81\\x95\\xb7 \\x93/\\xf2\\x9c\\']\\r\\xc2\\x97\\xeb+\\x8c\\xf8\\xa2f\\x05\\x18\\xf6\\xd9J9\\x00?\\xa5\\xc6\\xdf%\\x8eY\\x1ffE\\xbe\\xaaB#\\xbe\\xa4\\xf5y\\xda\\xe8y4\\x10\\x7f\\xd9\\xdf\\x145|c.\\xd0\\xf7\\x99\\xff\\x07\\xbe\\xef\\xb7<3\\xfc\\xa6\\xae\\xec\\x9fz1z\\xf6\\x97\\xeb\\x8e\\x9b\\xd9?\\xc0\\xff\\x12\\xcf\\x06\\xfa_\\xbf=^\\xc82\\x1e\\xc9P\\xfd/ \\xfe\\xd2t\\xf1\\xf7\\xccz\\x17\\x86\\x8c\\xb3a\\xff!\\xcf\\xa3\\xc2\\x17\\xfd\\xda4\\xfd\\xda\\x157G\\xcf\\xc32\\xe2\\x96\\xb4v\\xf6\\xd7c\\xdf\\xb3\\xa3\\xd9AQ\\xc7\\x17\\xfd$\\x80\\xbeD\\x14p\\xc0\\xcf\\xd79\\x83z\\xfc\\x0f\\xe7\\xb7\\xa0\\xad\\x8d\\x87\\xd4\\xe9t\\xf1\\xb0{D\\xd1\\xd3\\xaa\\xf5\\' 0n\\xdd\\xf1\\xe3\\x8d\\xf1\\xb6\\xa0=L\\x9a\\xde\\x84\\xaa3^K\\x9d\\xa7N{11\\xc5\\x8e\\x1f2\\x1f\\x84\\x83\\x9f\\xa3\\xab\\xbf/\\x13Q\\x80\\xa3\\x97\\x1c\\xf1X\\xbewR\\xe74c}\\xb6\\x13{\\x0ex\\xb0\\xb7\\xc4\\x83\\xccl\\xa7\\xf2\\x96\\xd1\\xf3\\xa4e\\xb4i\\xcfa3lY\\xf4Z\\x86\\xfe#\\xdd\\xc8\\xb7u\\xa7\\xcbr\\x0f\\xe1\\xd0\\x8a5mV\\xf8kLz\\xbf\\xdeDTg\\xe4\\x15v\\x189\\xc1\\x161\\xf6\\xa8\\x896\\x1c9\\xden\\x86]c\\xf5N\\xe3\\x9c\\xf7\\'\"\\x9bQ\\xe6\\xf6]?\\xbeZ\\xd1\\x8a\\xa1\\xef\\x84\\xc6\\x15<\\x8b\\xbfiUdL\\xb0%\\xa3\\xdd-\\xde\\x8963\\xbb\\t\\xbf\\xfc9\\xcf\\x85O\\xbft(1)\\xde\\xe4\\t\\xefJH\\x9cb\\xc7\\xbc\\x85-\\xd8\\xbc\\xcd\\x85\\x7fn\\xf9\\xadl.\\x99\\xbd3\\xbb\\xb0C]\\x14\\xf3LM\\xa8s[\\xf4\\xe3\\xe9\\xc6\\xb8\\x88\\x10W\\x16}uW\\xef\\xf20l!bs\\x8b1G\\x85\\xc0u\\x8b\\x9eV\\xf4\\xd5Q|\\x07\\xf7\\x11\\xb9Z}\\x0b\\x9f\\x16uS\\xf7\\x7f\\x04\\xbb\\xba\\x96#\\xfaI\\xc1\\x1b\\xb6\\x9d\\xcb\\xbb\\x03\\x8c\\xc1\\xcf\\xd8\\xa8v\\xc6\\x9es0\\xd6\\xf7:c=\\xcb\\x19\\xeb.h9c\\xdd\\x04E\\xba_MN\\xd3#t\\n\\xdd\\x02C`\\tL\\x81\\xfdo\\x00\\x00\\x00\\xff\\xff\\xc6\\xf9Yo6\\x15\\x00\\x00'\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"###[ HTTP/2 Frame ]### \n",
" len = 0x8\n",
" type = PingFrm\n",
" flags = set([])\n",
" reserved = 0L\n",
" stream_id = 0L\n",
"###[ HTTP/2 Ping Frame ]### \n",
" opaque = 0\n",
"\n",
"###[ HTTP/2 Frame ]### \n",
" len = 0x167\n",
" type = HdrsFrm\n",
" flags = set(['End Headers (EH)'])\n",
" reserved = 0L\n",
" stream_id = 1L\n",
"###[ HTTP/2 Headers Frame ]### \n",
" \\hdrs \\\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 8\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 33\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 22\n",
" | | data = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 36\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Literal\n",
" | | len = 2\n",
" | | data = 'HPackLiteralString(-1)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 24\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 13\n",
" | | data = 'HPackZString(private, max-age=0)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 31\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 22\n",
" | | data = 'HPackZString(text/html; charset=ISO-8859-1)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 0\n",
" | \\hdr_name \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Literal\n",
" | | len = 3\n",
" | | data = 'HPackLiteralString(p3p)'\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 81\n",
" | | data = 'HPackZString(CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\")'\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 78\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 54\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Literal\n",
" | | len = 3\n",
" | | data = 'HPackLiteralString(gws)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 28\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 3\n",
" | | data = 'HPackZString(4420)'\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 72\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 0\n",
" | \\hdr_name \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 11\n",
" | | data = 'HPackZString(x-frame-options)'\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 9\n",
" | | data = 'HPackZString(SAMEORIGIN)'\n",
" |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | magic = 1\n",
" | index = 55\n",
" | \\hdr_value \\\n",
" | |###[ HPack Header String ]### \n",
" | | type = Compressed\n",
" | | len = 165\n",
" | | data = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n",
" |###[ HPack Indexed Header Field ]### \n",
" | magic = 1\n",
" | index = 71\n",
"\n",
"###[ HTTP/2 Frame ]### \n",
" len = 0x122b\n",
" type = DataFrm\n",
" flags = set(['End Stream (ES)', 'Padded (P)'])\n",
" reserved = 0L\n",
" stream_id = 1L\n",
"###[ HTTP/2 Padded Data Frame ]### \n",
" padlen = 230\n",
" data = '\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\xff\\xc5:\\xebz\\xdb\\xb6\\x92\\xff\\xfb\\x144\\xfcU\\x96\\xd6\\xb4DR7R4\\x9d\\x93:n\\xe2n\\xda\\xa4\\'\\xc9I\\xcf\\xa6\\xa9>\\x90\\x84(\\xc6\\xbc\\x99\\x00e;\\xb2\\xdem\\x1fg\\xf3\\x16;\\x03^D\\xc9N\\xd2o\\xff\\xec\\x97DC\\x003\\x03\\xcc\\x053\\x03 \\xa7\\x07~\\xea\\x89\\xbb\\x8c)K\\x11Gg\\xa7\\xf8\\xab\\x84\\x82\\xc5\\xdcK3\\xe6\\x10\"\\x1b\\x88\\xe0\\x90\\xa5\\x10\\xd9l0\\xe0\\xde\\x92\\xc5\\xb4\\x9f\\xe6\\xc1\\xe0=s_\\xd3\\x80\\x11%\\xa2I\\xe0\\x90EN\\x80\\x03\\xa3\\xfe\\xd9i\\xcc\\x04U\\xbc4\\x11,\\x11\\x0e\\x11\\xecV\\x0c\\x90\\xb5\\xadxK\\x9as&\\x9cwo\\x7f>1\\x89\\x82<O\\xd8u\\x11\\xae\\x1cr^\\xa2\\x9f\\xbc\\x85\\xd9\\xc8>\\x8bA\\x18\\xc3L|\\xe0\\xe64\\xf1\\xc3$\\x18\\x04i\\x1aD,\\x18\\xe8\\xb7\\xf5\\xe7\\x9c\\x0b\\x18\\xa3\\xb9?\\xf7\\xd2(\\xcd\\xe7\\xbaa\\xfaY?K\\x82R\\x88,O3\\x87H6\\xc0]\\x84\"bg\\xcf%\\xe5\\xe9\\xa0l\\x9dr/\\x0f3q\\xd6]\\x14\\x89\\'\\xc24\\xe9\\xf6\\xd67a\\xe2\\xa77\\xfdr\\ng}uq9;z\\xf5\\xf9\\xe7\\xdf\\xdf\\xff2?y9z\\xf5_\\xf4ul%\"xu\\xa4^]\\xfc\\xf1\\x1a\\x06\\xa7cmj\\xe8\\xaa>\\x1c\\xeb\\x966T\\x87SM3FCu\\xa4\\x19\\x96\\xa9\\x8f\\x01\\x0e\\x8d\\xc9t\\x8a\\xd0\\xd4t\\x03\\xe0H7-\\x0b\\xe1pd\\xc9\\xf6\\xd8\\x1c\\xe9\\x08\\xcd\\xe1\\x08\\xf1\\xc6\\xe3\\xe9\\x08\\xe9&\\xc6d2A8\\x9e\\x9a\\xd8?\\x99\\x9a\\x13\\r\\xa19\\x1eKh\\x99C\\xb3\\x84\\x92~jL4C\\xc2\\xe9\\x14\\xe9\\xa7C\\xe0%\\xe1\\xd40%\\xb4\\xc68/p\\xb7\\xa6\\x12Zc9>\\xd1\\xac\\x12ZC\\xbd\\x84r}Ss$\\xf9\\x03\\x1cO$\\x9cNF\\x08-]\\x93mk4\\x92\\xf3Y\\xb0R\\tM\\xab\\x1c\\xb7\\xc6\\x08A\\xdc\\t\\xcec\\xea\\xda\\xb0\\x86\\xc8\\xd744\\xc9\\xcf4\\xf4\\xc9XBC\\x97\\xe3\\xc6D\\x97\\xe3\\xa0\\x069>\\x02\\rJ8\\x94\\xfa4a\\xbd\\xb2\\x7f\\xac\\x8d%\\xfexbH8\\xd1t]B\\xc3\\xd2$4\\'\\x12\\x7f:\\xd5%\\xfd\\xd4\\x92\\xfa7\\x91a\\t\\x87\\x93\\x12\\x8e\\xe4\\xb89)\\xf9[\\x9aV\\xc2R>\\xd3\\x1a\\x96\\xeb\\xb6\\x86\\xa3\\xb2=2\\xe5<\\xd6X\\xea\\xc5\\xb4&V\\xd9?\\x1d\\xe9\\x15D\\xfe\\xc0\\xc6\\x9cH8\\x1c\\x1b\\x12\\x8e4\\xbd\\x84\\xd2\\xae\\x16hf\\xa2\\x9aCM\\xd3\\xac\\x12\\x1aSC\\xc2\\xd1\\xd4TA\\xba\\xc9\\x04\\xfc\\x06\\xe0t\\x08\\xf3!\\x1c\\x81^\\x10\\x9ac\\xb3\\x84\\x96l\\x9b\\xda\\xb8\\x82\\x13\\x89o\\x8eA~\\x84\\x16\\xe8\\x07\\xa0\\x05\\x9c$D\\x7f\\xd45\\x03&4\\x87\\xe8\\xa8\\xf0a\\x18G*-\\xc4\\xb2\\xe0,\\x9fi\\xea\\x15\\xf7\\xf8\\xec\\xc8\\xb3<K7\\x17\\xda\\xdc\\x18\\x1dm\\xecr\\x0b\\xf4\\xaf^\\xbct\\x8e\\x16\\xf9\\x91\\xbd\\xe9u{v{\\xabT\\x08\\x91\\xe7|\\xf8XcG\\xa1\\xa3\\xd5\\xdf\\x01\\x13\\x17\\x97NC@{\\xebE\\x9awW4W\\\\\\x9bv:\\xdd\\x03\\x8a(O\\x85\\xc8C\\xb7\\x10\\xec\\xfe\\xfe\\xa0\\xeb:\\xbb}]\\xc2B\\x9f\\xf4z=\\xbbGa(\\xa39\\x04\\x87\\xdfR\\x9f\\xd99\\x13E\\x9e(\\xee\\xfd}\\xbd\\xce\\x8b\\xcbMk\\xe6\\x97_\\x9b\\xdaI\\x8a(\\xfa\\xfb\\xf3G\\xdf[@3)\\x866\\xee\\xb4\\xf4Sb\\xc80\\xcag\\xc4q\\xaa\\xd0\\x12\\xa5\\x1eE\\x8c>\\x04(\\x91B\\xe8j8\\xc4\\xd1Cr\\x05\\x97\\xdb`\\xdc\\xb40\\xa8\\xea\\xf6\\xd6\"\\xbf[7\\xd4\\xdd\\x8b<\\x071iO=\\xd0ap\\x03\\xf3x\\xcb\\xae\\xd7[o\\x1a\\x06\"\\x8c\\xd9\\xc3I\\xba\\t\\xbbQ\\x9eQ\\xc1z(\\xfd[\\xc0\\xe9\\xf6\\x1a\\x92(\\rv&U=\\xd5W\\x83\\xde\\x9a:[\\x84wy\\xd4\\x1a\\xb2\\xc3E\\x97\\x90\\x03\\x07\\xd4\\x0e\\xea\\x06\\xd6\\x97\\x18\\x84mT?k\\x88<u\\xd1|\\x876\\xfb\\xb0\\xf8\\xe8\\xb8\\xb6\\xdbO\\x13\\x86B8\\xf8\\x15\\xa5\\xd4\\x97\\x1f\\xd4Ms\\xd1^\\xb6\\xcf\"&\\x98\\x82T\\x1b{\\'dw:;\\xcd\\xfe\\x8aE\\x8ft\\xf5\\xa3\\xe2\\xf1^P\\x1e,\\x82\\xe7\\x9eC[.\\xbd8\\xd67m}\\x80\\xb8\\x8f\\xaa\\xa4\\x94\\x90\\x90\\x96h\\xfc\\xfe\\x9e\\x10\\xdb\\xbb\\xbf?\\xd1\\x0f@\\x16\\xceh\\x0e6!\\x1d\\x16:\\xa4w\\x7f\\xdf\\x05t\\xf9}\\xdc\\xde4]\\xbf\\xa7\\x9e\\xe8N\\x1b?\\x92\\x04\\xe0\\xb5\\xbe\\xb3\\xe3\\xe4\\x80\\x8a\\xbd\\xec\\xd8\\xa9p\\x8e\\xa1\\xc3\\xa6\\x0e\\xccH\\x06\\xe4\\xb8\\x1b\\x00\\x0cX27\\xb4\\x11\\xe9\\x1d\\x93\\'\\x14r\\xbb\\x13v<H\\xb1\\xc7\\xf4\\x98t<P19v\\x8f\\xd9\\xf1\\x02Z\\x9fo\\xb7+\\x11\\xd2\\r\\xec\\xc1_e\\x1d\\x10\\xf6\\x05\\xe3\\x02\\xf4\\xd3\\xe9\\xb4\\x1d\\xbe\\x8b\\xb3\\xef{ \\xa1D\\xfa\\xe0\\x1a\\x149\\xa3j\\x10\\xc5\\xf1L\\xdf\\xf4T\\n\\xba\\xe9\\xd5;\\x876\\x1a\\xbds\\xd6\\xcd\\xf7\\xed\\x9e\\x83\\xd7(\\x1fh?\\xf4?:\\x1f\\xa0\\xf3c\\xc5\\xe1@\\xdf\\xda\\xe4\\xba\\x1d\\x83\\xd0mv\\xcd\\xb3\\rV\\xd7\\xfd\\xac\\xe0\\xcb\\xee\\x87\\x0f\\xf4#\\x0e|l\\xfb9\\xf5\\x9fF\\xfb\\x1bl\\x9f\\x0e\\xe7\\x07\\x9aM\\xaf\\xef\\xd1(\\xea\\x8ae\\xc8{\\xd2\\xb3\\xe9\\xfe\\xfeV1\\x98,s\\xb6\\xe8C?\\xbb}\\x05{\\xe2\\x90\\xc8\\xbd\\xa1\\x9d:n\\xe9,^\\x8d\\xc2\\x0b\\x97C\\xccI\\x82\\xae{\\xac\\x83\\xd2\\xbb\\x7f\\xddwz\\xd7\\xce\\xa0T\\xba\\x07JF\\x7f\\xf0vXu:\\xb4\\x9f\\xb3,\\xa2\\x1e\\xc4\\xa9A\\xe9)O\\xc8\\xb1\\xd7t\\x96\\\\\\x16\\x99\\xf3\\xe1\\xaf\\xce\\xc7\\xff\\x18\\x04*A\\x17\\x90&_\\x12\\x10\\xe2tP\\x15@\\xa7\\\\\\xdcA=t\\x18\\xb84W\\x0f\\x03L\\n\\x100\\xa14\\xe3\\xe1g6\\xd3\\x87\\xd9\\xad\\x9dQ\\x1f\\xcb\\xb0\\x13\\x91f3=\\xbbU\\x0e\\xc28\\x83MI\\x13ao$\\xddz\\xc9\\xc2`)f\\x86\\x91\\xddn*\\x1e5\\x91\\x9b\\n\\x91\\xc6\\xb3\\xe9.\\x1dV\\x89\\'4\\n\\x83d\\x96#\\xe9\\xa6\\x1f\\xb8K\\x15~\\xfc5\\xecw\\x9f\\xe5\\xcdd<\\x8dB_9\\xf4,\\x7f\\xba\\xd0\\xed\\xd6\\xca`*$\\xaa\\xe7\\xd6\\xec,\\xe5!*\\x7fF] \\x82\\x08n#\\x0fc\\x04\\x12\\xdc\\x84\\xbeX\\xcetM\\xfbq\\xf3\\x8f\\x98\\xf9!U\\xc0\\x80k \\xd7\\xdbK\\xb7c\\x9a\\x07ar\"W4\\xeb\\x8fYl\\xafX.B\\xb0v\\xb5V`XI\\xbc\\x00\\x97\\x11\\xb3\\x88-\\xc4fC\\x91\\x91\\x8a\\xbf\\xa3\\xb5\\x14\\xccg^\\x9aKG\\x98\\x15`\\xb4<\\n\\x13\\xd6\\x92~\\x87@\\xd6\\xaf\\xb3CM\\xf3\\xda\\x180\\x14*\\xedq\\xdf7\\x991\\xddCY\\xec\\xa0@\\xf1\\xd1\\x1e\\xff\\x01L,M[Y\\xd8M\\xfd;U\\xf8*U3\\xb5\\xbf,m\\xbc\\xa0q\\x18\\xdd\\xcdh\\x1e\\xd2H\\xe54\\xe1\\'`\\xbap\\xb1A\\xdcu\\xa9\\rPl\\nZ\\x00yoN\\xeef\\xe04)\\xe4\\xa4\\xc3 \\rj\\x0b\\xcf\\xc0E\\x14\\x13\\xfei\\x1b\\xe1\\xafQ\\xd4\\x93J\\xa7}\\x93\\xc5\\xb0L\\xea\\xcdceoH\\x07\\x7f\\xd8@^\\x8e\\xabYj7144\\xeb\\xb2\\x16i8\\xf16\\xfd\\xeb\\x96\\x8e6}\\xc1\\x91W=\\xb7\\x86\\x1d\\xb5\\xcb\\x00ZD3\\xcef\\xf5\\xc7\\x86\\xc5\\xa5\\x9c7\\xe5\\xacn\\x1a\\xf9\\x95\\x0b\\xa1Jf\\t,\\x80F\\x1b\\x88\\xd4\\xa2\\xf1\\x83q\\xe3.#k\"}\\x8c/BU\\xa2 \\xe5LGQ\\x1f(\\x0c\\xb1x\\x850}\\x14\\xc1\\xe7k?\\xe4\\xb09\\xeffa\"U\\xe1\\xa6\\xb7\\xf6~\\x17\\x04\\x90\\xab\\xca\\r\\xa5^5e\\xb4\\xf5K\\xf4\\xb6\\x19\\xb47a\\x92\\x15b\\xc7\\x82a\\xb2\\x84i\\xda\\x9ee\\xc8\\xdf\\xe1\\xae\\x97\\xe9\\xfa\\x8e\\x97I3\\xbb\\xd4\\xbb\\n\\xf2\\x14\\x1cuv\\xb8X,\\xec\\x12\\xd5\\x85(r\\xb5\\xa1-B{\\xdf\\xb5\\x13\\xc8\\xd7\\x1b:[\\xa2{\\xa8tF!r\\xae\\xd8\\xd77\\xc0\\xa6\\xbf\\x88\\x14\\xda\\xb6,\\x9d\\xadB\\xd8\\xb2\\xcc\\xaf;\\xc7c\\x9d\\x9a\\xee\\xdf\\xdbO\\x12kX\\xce\\xfe\\x00K.\\xed0\\xc0\\xf3\\xa9\"\\x95Q\\xe1U\\xf3\\x80\\x98;;\\x89\\xbb\\x91\\xb7nG\\xb91\\x1a\\x1e{a\\xc1\\xb5\\x89vlc\\xa0mv\\xec\"#e+<\\xc9\\xf8\\x14q\\xd7\\xddQ0c\\xcc.\\xbduV\\x066@\\xb3\\xb7\\xee\\x8b\\x8b\\xf3<O9\\x84cX\\xf5\\x03M\\xbb\\xf2\\xcd\\xa1\\xd6\\xf0\\xdcY\\x14hVD\\xea\\xe1\"\\x8aZ\\xcb}\\xcc\\xa34E7*\\x16\\xedU\\x15P\\xc1\\xd5g\\xee\\x84\\xae\\xe6P\\xe5\\xa4\\x86a\\xe1q\\xba\\x07\\x1ex\\x02\\x873\\x10\\x172\\x0b\\xa3\\xe2\\xa4^\\xae\\xd4\\xb1\\xdd\\xecL\\xcd\\xf6\\x8a\\x9c\\xc3w\\x96\\x86p\\x8c\\xcf\\xdbk\\xb6\\xb7\\x91\\xa4\\x10\\xb8*\\xf8*\\xb7\\xca\\xf8\\x91\\xad\\xf2X\\xcc\\xc5\\x15\\xd7\\x0e\\xd6V\\'(G\\xee\\xde\\xd9\"\\xf5\\n\\xbe\\xae\\xd9K\\xf3o\\xc3_\\x95\\xe8\\x9a\\x8c\\x078W\\n\\xa6\\xdeG\\xae\\x1a\\xa00\\xf7\\x0bO\\x0cB/m\\xee\\x1a\\xa2\\xd4\\xcf\\xfa\\xd0A@\\x07\\x91C\\xf8\\x12\\xfc\\xc6+\\x84\\x02]\\t\\x01\\xbe\\xe55\\x08n&\\xc5\\r\\xa4F\\x1c\\x82>F\\x1e\\xbde\\xc0\\xdc\\x8fE\\xe6\\xd1WT~$K\\x8a\\x90q(\\xbdi\\xc4\\x99\\xed\\x83l1\\x1c=\\xfa8CU\\x1a+\\x8e\\xf2\\xf0\\xe2\"Q:\\x1d\\xa5\\xfe\\xeeb\\xb9\\xa1t\\x1b\\xe2r\\xb2\\xde\\xba\\xa9\\xc9\\xbb=Y\\xeb\\xc2?{\\xf3\\x03\\xa2\\x1e\\xe0\\x9cP_\\xd7\\x14\\x8bNg\\xfb\\xdd\\xbf\\xeeK\\x1d\\x03\\xdb\\xa63p\\xaf\\xdb8\\xd8l\\xa1m~\\x80?xn\\xdc*\\xde\\x0fWJ\\x085g\\x9c\\x04.9S\\xea6&\\xd4\\xb3\\xd3$u\\xe1\\xd7U\\xbc\\x88r\\x0e}\\xfa\\xd9?\\x99\\x07Q\\r\\xfe\\x9d\\x0e\\\\\\xc0\\xa6\\xdb\\xa1\\xcaz\\xe5\\xf1j0\\xb8\\xb9iJ\\xf9E\\x0ej\\r\\x96\\xd9\\x93%TsyGP\\x17j3r&%\\xe6\\xa7\\x03\\xfaM>1$\\x8d\\x16#l\\xb6\\xf9D\\xe4\\xecW\\xe8\\xfa\\x1e\\x17\\xdc~5\\x17/\\x8d\\x07m\\x16&9{\\r\\xc3\\xdfc\\x81\\x02\\xdd\\x817\\x17n\\xc5\"\\x88\\x9c\\x9f\\xffY\\xb2\\xd0\\xc9\\xd9\\xbf\\xd3\\xe2-\\x0c}\\x8f\\x0b\\x98\\xba-Nr\\xc3w\\xf5\\x02\\xce\\xfb\\xd4\\x13\\x05l3\\xf1\\xe5o\\xe8&\\x8c\\xdaRa{\\xf0D\\xf2\\x89\\xc9\\xd9sl~\\x8f\\x85\\x9f\\xc3\\xfe\\xdd\\xd1\\x8c$O\\xc9\\xd93\\x1cyH.7py\\xa5\\xb8\\x1f\\xdd\\xc9\\xb7] \\x11\\xd1\\x00`\\x9a!\\x01\\x1f\\xc0N,@\\xf1\\x05HY\\x9c)\\x9d\\x9c^\\x17\\xa9\\x8d\\xf3\\x9d\\x0eJ\\xb7\\x1b\\x80+6\\xfe)\\x0bXE\\x16\\x01\\x0e\\xd6\\x8c\\xb5o\\xf2\\x8c&\\xa5\\xbf&\\xcd\"C\\x8c+\\xd0\\xdf\\x1e]4\\xa3\\x8bGFY\\xd3G[2<\\x10\\x01\\x0e\\x17\"\\xcd\\xefP\\x04p\\x84\\xd2l\\xa4a<:{!\\xc7\\xc3\\xeb\\x82)\\xef\\x99+uw\\x8f\\xda\\xab\\x03[\\x06\\x80\\xe5,\\xf1\\x18\\x7fH\\xfc\\x9a\\xe64\\xfe\\x1f\\x91W[B\\x12\\n\\x08\\xd2L8s\\x88\\xb7\\xe5B\\xe7SmO\\xc9\\xd4\\xf3 \\xee\\n\\xde\\xb6\\xe1\\x1b\\x96\\xafB\\x8f\\xbdL!\\xc2W\\xce\\x95\\xc14`OG\\xe4\\x05\\xeb\\xe0\\xadn\\x98\\x14\\xccy\\xdcR\\xedU\\x9d\\xa7I\\xc2n\\xc1`\\x8f[\\xa6F\\\\V~!\\xd3\\xae\\xf6-\\x8c\\xb2\\x90\\xafQ\\x94\\n\\xd3c\\x98\\xa0 \\xd4\\xc0\\x19,\\x82\\x93\\x93C\\xe00@d`\\x8a\\x82\\xcc\\'\\xdb8\\x15\\x05\\xb4jU\\x9eX\\x97\\x9d\\x86\\xacw\\x15H\\xf9\\xbb\\xe3uu\\xabkM\\x15iL\\'\\x98\\xe2\\x1f\\xcf\\xb6{7\\xdc\\x98\\x05\\xb6\\x97\\xdc\\xd8\\x9a\\xdf,\\xa1@\\x9ao\\xc9\\xab\\xfbncj\\xdcZFy\\xe5\\xddS\\x92\\xf4\\xa4\\xcc\\xceD\\x91\\xb7\\xdb\\x0e)/\\xbb\\x89\"S(\\x08\\x02\\xaa*%\\\\f\\xc8\\x96(\\xd5\\r\\x0bi\\x0e\\xaeQ\\xa7\\x03?\\xdd\\xde\\xae@U~\\x9fN\\xa7\\xed\\xdafR\\x97:\\xed\\xba\\xba9~A\\x92\\xa4\\x98\\xa9\\xe5\\xf1k\\x8a\\x9a\\x90\\x962\\xb0r&\\xb0\\xd6\\x9b\\x9cf\\x0e!g?\\x83\\xf0\\x1e\\xab\\x8c\\xd2\\xfe\\xdd\\x9a\\x1dO\\x08\\n\\x95i\\xce\\xa9\\x8f\\xb9\\xc0\\x82\\xc6\\xb04L\\xaf\\x10?\"\\xa6x,\\x8a*\\xcb8D#\\xb2\\r;\\xcc\\xab\\xda\\x80\\x96+\\xabJ\\x13\\xb0&\\xec\\xf0\\xab\\xedM\\x8c\\xf1\\x8f\\xe4\\xac\\x93\\xb8<\\x83x |9T\\xa1\\x96~\\xd2^\\xf1\\xa9,\\xbc\\xab\\xf9CP/p\\x05\\xcf&\\x97o^\\x9d\\x98\\xe6\\xd8:\\xd1\\xc1\\x00\\xe5\\xfbI\\xe8\\xfb,i(*<\\xdc\\x84%\\xf12\\xfa\\nf9\\xcc\\xd3\"\\xf7\\xd8\\x1eJ\\xcde\\x99\\xeda\\xbb\\xe1\\xcd7\\xb9\\xb9\\xe1\\xf2\\xc1\\xf8v\\xbb\\x10\\x9f\\x93=\\xff\\x1dn\\x0f\\xc3x\\xdeP\\xb4\\x86\\xe1\\xae[`\\xd9\\xd7\\xd4v\\xf5\\xde\\x18\\xd7\\xc7A\\x05\\xdd\\xe4a1\\x07NY\\xe0\\xddg\\x9c\\xe1=\\x9eCR(\\x94\\xea\\xa5@)\\xd7\\x88\\xd9\\xf8rS\\x06(\\xb5W\\xc7\\xf46bI \\xed\\xa7\\x8d\\xccZ\\xa9\\xd7 \\x07\\xf8\\xa7C\\xc6S\\xb2\\xf5\\xa5z\\xcd\\xed\\xe3\\'\\n$#\\xf2V\\x05\\xbb\\x1dXd7Bo\\xfb\\x9a\\xc5=\\\\S\\xa5j\\x91<\\xafu\\xcd\\x0b7\\x0e\\x05i\\xc2};\\x13\\xfc_\\xe7\\xfd\\xe5\\x88\\x86\\x8a\\xcf\\x94\\x88\\xe2\\xebZ\\xe2\\xb5\\'\\xbe\\xc4]\\xedE\\xa1w\\x05\\xce\\xb9\\x90\\xd7S}\\xdc@P\\x93I\\xea\\x9e\\xec\\x815{W\\xccwt[aP]*`\\x91\\xe6\\xda\\njR?M\\xfd\\x08\"\\xd3\\xd1w\\xa4\\xa8\\xf7J\\xb5F8\\xda\\xe1qi/\\xe04;gg\\xb75yo@\\xfd\\x15\\xca\\xe0\\xcf\\xab\\x0b\\xac2}\\xd08\\xb3\\xeb\\xf7\\t\\x07,\\xb5\\xd55E\\xf4/\\xb2P\\xd82\\xc1\\xf7\\xc8\\x02\\xa2)$\\xae4\\xe2_\\xe1\\xf1\\xaa\\x10a\\xc4\\x15\\xf0\\x81\\xa0\\x80\\xc4\\x89i\\x93\\x97Y\\x06\\xe5\\x18\\x08\\x8c82\\x98\\xd4\\xba\\xc7X\\x19\\xb8\\xabZ\\xbd\\xf2\\xf3\\xd1\\xdd\\xa8\\xa3jP\\xcd\\xdb\\xb4\\x817\\x1e\\x1c\\xf3\\x1ei\\'\\xa7\\xca\\r\\xb7a\\xd4\\x1c\\xfeh\\xc7p|\\xac7\\x1d^8\\x91v\\xf4\\xabk\\x06\\xa0I1\\x12}\\x85\\x0f$\\x1b\\xb1;V\\xedI\\xdd\\xc2\\xe3\\x15l\\xb6\\xf6u[\\x1d\\xd5$_\\xc8{-M\\xd6U\\x13\\xf5\\xb1bz\\x83whX=)Y\\xe1\\x82W\\x85\\x82\\x86U\\xc1\\xb0%\\xe1e\\xf6\\xdf\\xc5\\xf7\\x8f`\\x0eHHy\\xc8wm\\xb5\\xad\\x90\\x8b\\x9d\\x1aB\\xd7&\\x96\\xa6\\x8f\\xcc\\x89i\\xe2\\x83\\x98\\xa1\\x19\\xa6aT\\xa7-99_\\xa2\\xf8\\xc7\\xf5\\x13.}l\\xd1.\\x94I}|x&g\\xff\\xad\\xe0\\x03p\\xcaq\\xa7<B\\xf3x%\\xc2\\x99\\xc0\\x9a\\xc9O\\xa1\\x94M\\x9eT\\x9f\\xce\\xbb7\\xd2\\x97x\\x188\\xf3\\xf9\\xab\\x17\\xc9\\xafo/\\xce\\xaf\\xae\\xf4_\\x9f\\xaf\\xfex\\xf3\\x9f\\xc1\\xf3\\xd1s\\xfdi\\xfc\\xe2z|\\xf9\\xe3\\xf0Y\\xa5S\\x06\\xb1\\xbdzlF\\xe1J/ke\\xb7l?\\xb7N\\xf0O+\\xbd\\x9ahN\\xa8\\x9b\\xb2;[14}\\xa2\\x9c(\\x0f\\xc5\\xcdR4\\t(\\x1e\\xb4\\xbc\\xa2\\xde\\x1d\\x18\\x00\\xca\\xa7E\\x08\\xae)BY\\xd1\\xcb\\xca\\xee\\x9b\\xa4\\xe0\\x071/\\t}\\x99\\xba\\xab-\\x91mwy]+}\\xef\\xb5\\xbc\\xef\\xf9\\xa9\\xd3\\\\\\xc5\\xaae\\xe9\\xa3m\\xec\\xfd\\x83osS\\x1eB\\xa9\\x97\\xbfG4\\xd5\\xdd\\xe9{!y\\xe0U\\xf9\\x01\\xbd\\xbf?p{\\xe5]y\\x85R\\x1f6U\\xd0\\xf4\\xf9\\x9b7\\xfa9\\xa4\\x11({\\xf0z\\xdc\\x93\\x9f\\xbf\\xa6>{\\xe25x\\x17\\x11C0\\xf3\\xe4\\xe1Y\\xa5\\x8e\\xdf\\x87\\x08\\t=\\xf5\\xd4u\\xbb\\x9a\\x96v:n\\xa7\\xd3\\xa5\\x07\\xceV\\xae\\xbe\\x94\\xe6\\xfe\\xde\\xdd\\xe9,e\\xdd\\xbe\\x88@Y\\xd5%D\\xc5\\xbf\\x83\\x92%\\xbe\\xbb<\\xe9T\\x8f.\\x90\\xa3\\xabW\\x17\\xc8\\xc6\\xf2\\xd5e\\xf7\\xed\\xe7\\xea\\xe2\\xb2\\xb7\\xf7\\xb2\\xf0\\x95\\xc3\\xf3\\xed\\'\\xee\\x93\\xbd\\x13\\x0bv\\x86\\x8f_7\\xd4\\x9f\\x8a\\xd7u\\x1b\\xa3\\xf1\\xf2\\xa5\\x0fv\\xccC\\x035\\xe7y/\\x87\\x8a\\x92U\\x1a\\xec\\x92\\x927\\xe9\\xd9T\\xde\\x1b\\xb8\\xad{\\x00V\\xeb\\xf9\\xa7\\xbbK\\xbf[\\xae\\xb0\\xd7\\xa7Y\\xc6\\x12\\xff|\\x19F~\\x97\\xf66\\xaa\\xd6\\xdbT\\xc2\\xfa\\xd1\\xa7l\\xfb\\xd6\\xe2\\xaa\\xb4yk\\x01\\xd2\\x02X{H`o\\xb1\\x1doO7_wD\\xe0\\x90\\xc7\\xf8\"$\\xd5\\x07nT\\xbf\"\\xf5\\xea\\x8f\\xfe\"\\xcc\\xb9@\\x14t\\xb2-Y\\xc3i^{\\xdb\\xfc\\xfe~\\xdd\\xbc1\\xce\\xfb\\xf3gE\\x9c]\\xdczL\\x9e*\\xb7\\x02\\xb0\\xdeZ,\\xf3\\xf4Fa\\x9b\\xd6\\x84\\xf8\\x86\\x96\\xf3\\xc6?\\xca\\xa6|i\\xea\\x8bF\\xde\\x9d^\\\\D\\xc4\\x9d\\xfaA\\xb6\\xdbz\\x91\\xb5\\xdb\\xaa\\xeb\\x1e\\r\\x00s0\\x1f\\xc0\\xcf\\xd5\\x9f\\xb7C\\x1fZ\\xfde\\xd6g\\xc9\\xfc\\xdd\\x9b\\xfe\\xfb\\xdf\\x86\\x7fdo>\\x9f\\xfc\\xf4\\xdc\\xec\\xbf\\x1a\\xc48\\xce\\xdd\\xf9\\x92\\xa9\\xfe \\x17\\xd8\\xfa4\\xf0\\x11\\xe8\\x03\\xd9\\xfa\\xecA\\x0c\\xc89~>=\\x7fki\\xe9\\xf3\\x95\\xff\\x82N\\xdf\\xbe4\\xde\\xcf/\\x7f\\xffC\\xe7\\xe3\\x9f^\\xdf\\xfe\\xfb\\xf2\\x05{\\xb7Z\\xfe~\\xa4\\xfe\\xffM\\xdd\\xb3\\xb7\\xa6\\x82\\xea\\xa5VH\\x16{\\xce\\x9a\\xc8i\\xc8lM\\xa0\\x10H\\xc8\\x0cO\\x9e*\\xf1\\xda\\xdfrK\\x92\\x19\\x96\\xb8y\\x94\\xa6\\xf1\\t\\x94\\xd1*\\xf1\\x975\\x82\\xbf\\xbc\\x16\\xcd7\\x07D\\x18]Du\\xcf2\\xe5H\\xdcd\\x0b\\x18\\x0c\\xb9\\x0b\\xc4\\x86\\xa9\\x92O4&\\x10\\xf4\\xc8\\'\\x9e&YM\\x11\\xc5\\xf5W\\xcc\\x03\\x8eK\\xf3B\\x17\\xf8\\x91\\x8b\\xc5\\x82z,\\xc7\\x12.\\xaf+\\x1b\\\\\\xc9]\\x8c\\x83\\x9c\\xd3;\\xf6\\x19*\\x1d\\xe6\\xc19F\\x08\\xa6\\xa4\\xb9X\\xa6\\x01\\xd4QP\\x00\\xcd\\x001\\xf2\\xae\\xee\\x00\\xf3\\x97?\\x0bM3&\\x87C\\xcb\\xde/\\tqr9S\\xa2p\\xbaJ\\xc3\\\\\\xc1\\x84\\x0b\\xdd)\\xbfB)\\xaab\\x08h8\\ry\\x88\\x04\\x19li\\x189\\x973\\xf2\"\\x80\\xc3\\xa9\\x0c\\x1aTqAo\\xca\\x17\\xf1\\x05z3\\xc85\\xf1\\x17\\x86\\x84\\xab\\x14\\x12\\xbc\\x82K\\x18\\x9eW\\t\\xe6OR\\xdfY\\xfcI\\xe4\\xc0\\xc5r\\xe7\\x8a\\xa2D\\x1e\\xd0r\\xac_N\\x8a\\xcb|S2f\\xa8T\\xee\\x86\\xb8\\xc2m\\xc9\\x97\\xe1]\\xa8\\xfc\\x7f\\\\0\\x88\\xa7\\xbf\\xd9\\xc3\\xda{\\xa3\\x92\\x04MV\\xaa;]\\xe5\\xa0m\\xe8\\xcb\\xaeK+\\xc2\\xe2\\xe0T_\\x8d\\xe6\\x0b@\\xfc\\xf0\\x11\\x98y\\xd0\\xa7k\\xf8\\x01\\x8e3\\x06(\\xd2+ XY\\xcb\\xc4\\xba\\xf8\\xed\\xf5\\xbf\\x8c\\xf3k\\xfd_\\xcf\\x9e\\x16\\x93\\xc2\\x1fO\\xde~\\xbe\\xba\\xfb\\x1d\\'\\xf2\\x91\\xf7\\xf6\\xf5\\xba\\x8c%\\xe5\\xfbp+$m\\xa3@\\xcc\\xfcf\\xb3\\xc3w\\xf7(LB\\xb1\\xf5el\\x9579w\\xdd\\xa6S\\xe2U\\xba\\x04\\xd4\\xcd\\xa6\\x1d\\xc7>5\\x11\\xe5\\x13\\xec\\xbaV\\xe36|,\\xbc\\xb7\\x86!\\x00\\xdb\\xf2U\\xb0\\xbe\\x0f/\\x8b\\x12L\\x8cx\\x89\\x8d\\xff\\'\\xf0\\x7f\\x01\\xa9\\x9a\\xd7%#(\\x00\\x00'\n",
" padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n"
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"###[ HTTP/2 Frame Sequence ]### \n",
" \\frames \\\n",
" |###[ HTTP/2 Frame ]### \n",
" | len = 0xe1\n",
" | type = HdrsFrm\n",
" | flags = set(['End Headers (EH)'])\n",
" | reserved = 0L\n",
" | stream_id = 3L\n",
" |###[ HTTP/2 Headers Frame ]### \n",
" | \\hdrs \\\n",
" | |###[ HPack Dynamic Size Update ]### \n",
" | | magic = 1\n",
" | | max_size = 12288\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 8\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 59\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 11\n",
" | | | data = 'HPackZString(Accept-Encoding)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 26\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 3\n",
" | | | data = 'HPackZString(gzip)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 31\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 9\n",
" | | | data = 'HPackZString(image/x-icon)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 33\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 22\n",
" | | | data = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 36\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 22\n",
" | | | data = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 44\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 22\n",
" | | | data = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 0\n",
" | | \\hdr_name \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 16\n",
" | | | data = 'HPackZString(x-content-type-options)'\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 5\n",
" | | | data = 'HPackZString(nosniff)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 54\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 3\n",
" | | | data = 'HPackZString(sffe)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 28\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 3\n",
" | | | data = 'HPackZString(1494)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 0\n",
" | | \\hdr_name \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 12\n",
" | | | data = 'HPackZString(x-xss-protection)'\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 10\n",
" | | | data = 'HPackZString(1; mode=block)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 24\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 16\n",
" | | | data = 'HPackZString(public, max-age=691200)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 21\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 5\n",
" | | | data = 'HPackZString(472252)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 0\n",
" | | \\hdr_name \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 5\n",
" | | | data = 'HPackZString(alt-svc)'\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 28\n",
" | | | data = 'HPackZString(quic=\":443\"; ma=2592000; v=\"35,34\")'\n",
" |###[ HTTP/2 Frame ]### \n",
" | len = 0x5d6\n",
" | type = DataFrm\n",
" | flags = set(['End Stream (ES)'])\n",
" | reserved = 0L\n",
" | stream_id = 3L\n",
" |###[ HTTP/2 Data Frame ]### \n",
" | data = '\\x1f\\x8b\\x08\\x00\\x00\\tn\\x88\\x02\\xff\\xbcX{PTU\\x18?\\xa6\\x8d\\x89\\xa5\\xf4G\\xff5\\x13\\xf60\\xffh\\xcc1\\x11\\xc7L\\xb3\\x07>\\xffp\\x94\\x10L\\x1b\\xd3L+kF\\'\\xb5\\x19\\xc7Rg\\xc2\\xb4@KtD _\\x91\\x80\\x8e\\x82\\x8a\\xa8\\x83\\nhI\\xa9\\xa8\\x08B\\x98\\xaf|\\xdf]`\\xc1}\\xb0{\\xf7;\\xbf\\xe6\\\\\\xeee\\xee\\xde\\xbd\\x97\\xdd\\xb5\\xb53\\xf3\\rg\\xcf\\xfd\\xbe\\xefw\\xcew\\xbe\\xd7\\x81\\xb1n\\xec1\\x16\\x1b+\\xfe\\xc6\\xb1y=\\x18\\xeb\\xcf\\x18\\x8b\\x8b\\xeb\\xf8\\x9d\\x1f\\xcbXF\\x0f\\xc6\\x060\\xc6b\\xc5:\\xebXWF\\x0f\\x16r\\x00\\x18DD\\x1b\\x89\\xa8\\x81\\x88\\xbc*\\xd5\\x13Q&\\xe7|\\xa0\\x95\\x1c\\xe7\\xbc\\x17\\x11e!\\xc4 \\xa2\\r\\x00\\x9e0\\x91\\xad\\x10\\xdf}\\xe4\\xc5\\x81\\xbfvb\\xf1\\x91\\x19H\\xd95\\x1c)\\x85\\xc3\\xb1\\xf0P*v\\xd7\\xe5\\xa2]vk:\\x8e\\xebuh\\xb8v\\xd7},(M\\xc1\\x94\\xfc!\\xa6\\x94\\xb17\\x05\\xdcq\\xafs\\x1f\\xday\\x15\\\\\\xbf\\x17\\x0bJ\\xa7*|\\x02s\\xfb\\xf9\\x1fQ{\\xff\\x0c.I\\xd5(\\xac\\xcdF\\xd6\\x8e\\xf1p\\xa4\\x8d\\x86;w.\\xc0\\xb9\\xa2C\\xd8\\x83\\x886\\x89\\xf9\\xeaKg1\\xa1p,\\x92\\x0b\\x87\\xa1N\\xaa\\x0e>\\xf7\\x9d\\x068W%\\xc2\\xf9\\xed[\\xf07\\x9c\\xd0\\xf6\\x90ID\\x8db\\xfe\\xca\\xc9V<]\\xd6\\x84\\xf4\\x0bE\\x96\\xb6k\\xdf\\xb3R\\x91o/I\\xd7\\xe4\\xc5\\xbd\\xf8\\xc4<\\xe6\\xa8\\x8c\\xc7\\xcbd\\x94\\xd8x\\x80\\x8c\\xe07\\x92\\xe7\\xd7E\\x9a\\xbcW\\x93\\xef}\\xacC\\xfe\\xa0=\\x0c\\xf9\\xc2\\xa5z\\xf9\\xcbb\\x1e\\xff\\x87\\x1f1\\xfb\\xbc\\xf8\\xec\\x177\\xc2\\x1d\\xaa\\x8f)w\\xf7\\xd39\\x19\\t\\x93\\xed\\x18\\x96(\\xe1|\\xad\\xcf\\x84\\xd7T~#\\xe7|\\xb0\\x98{\\xbd\\x1c\\xc9\\xb3\\x9a\\x10\\xff\\xb6\\x84\\xd7\\xc7\\xd9\\xb0!\\xc7\\x89s5>\\\\\\xa8\\xf5ac\\xae\\x13\\x93?h\\xc2\\x8d\\x9b~\\xa3\\x8aA\\xaa\\xff\\xe4\\x8a\\x1f\\xf7$B\\xca\\xecfE\\x87\\x19\\xcd_\\xec\\xd0co\\xd2\\xc5L\\x0c\\x11\\x9d\\xd0\\xf6\\x91\\xb7\\xdb\\x8d\\x19\\x9f4c\\xc4x\\x1b\\x86\\x8f\\x910\\xed\\xe3fl/p)\\xdfT\\xd9\\n\\xe1\\xf3\\x86\\xb8\\x8b\\xd1\\xf6\\x11\\xc2fYFYC,\\r\\x16<\\xe2^\\xc4\\xdd\\xaa\\xd4\\xa8\\xfa\\xe9 #\\xbf\\xa3/c\\xe5\\xdd\\x19[\\xde\\xad\\x83B\\r\\x8dO\\xc8\\x08\\xd9\\x01j\\x8eyS\\x9fgb\\xd9C\\x0f\\xce\\xf9S\\x9c\\xf3\\xa9\\xea\\x19\\xaa\\x88H\\xd2\\xe5!I]\\x136H\\x06\\xf0$\\x8b\\xd2\\xe0\\x9c\\xbfHD9D\\xe4\\x8a\\xc0\\x7f]D\\xb4\\x99s\\xfe\\xc2\\x7f\\xc0\\x15\\xb9o\\r\\x11\\xc9x\\xc8\\xa1\\xde\\xf1*c^\\r\\xf3\\xcc5\\x88\\xd2 \\xa2\\xf3\\x00\\x9e\\x0f\\x07[\\xad3\\x92\\x99\\x1e\\xc9y\\x07{\\xeb\\xb7ae\\xf9|\\xcc)\\x1e\\xa7\\xe4\\xd4\\xe4\\x82\\x04\\xcc.J\\xc4\\xb2\\xa3s\\x90W\\xb3\\x01W\\x9b\\x1b\\xac\\xf6p\\x8fs\\xfej\\x18\\xe7\\x0e\\xc2\\xb6\\xb9\\xeeb\\xed\\xefK\\x91T0\\xd4\\xb2\\x86\\xe8\\xe9\\xebcsq\\xa5\\xb9\\xdet\\x0fVvP\\xe3\\xfc\\xa2Q\\xe6\\xe4\\x8d\\xc3\\x98\\xbe{dX\\xb8z\\x12v)\\xae\\xc9\\xb6\\xba\\x8b \\x7f \\xa2\\xef\\x8d\\xbc\\xc5\\r;\"\\xc6\\xd5hf^<\\xfe\\xcc\\x18\\to\\xc5\\x16\\xb3=\\xac2\\xd8\\xfd%\\xa3\\x9fW^/\\xb5\\xd4\\xfd\\xc5\\xc1$l\\xa9NGic!\\x0e]\\xde\\xa5\\xdc\\xfb\\xd2\\xb2\\x8f\\x90\\x94\\x1f\\xaf|_\\xb25\\x017W\\x8f\\xee\\xacKZ]\\xd5\\xc7\\x85>6\\x8d\\xf9U\\xf8\\xd9\\xfb&6\\x9f\\xbbo\"\\xce\\xdc\\xae\\xb4\\xf4\\xf3\\xeb-\\x8d\\xc8/\\x9e\\x8dVC]t\\xadK\\x02\\xf7\\xba\\x8d{\\xd8\\xac\\x9e\\xbd\\x0f\\x11\\x05|\\\\yjm\\x10\\xf6\\xa2\\xc3\\xd3\\xd1\\xe6u\\x84\\x0e6\\xbf\\x0f\\x9e\\x9dK\\x82j\\xb3\\xaf\\xaa (G\\x89<\\xc99O\\xd5\\xaf_ss\\xf4*s\\xe3\\xb5\\xa2\\xb4N\\xecYE\\x89h\\xf1\\xd8\\xc3\\x8ew\\xeey\\xa0\\x9cY\\x8f\\xef\\xce\\x9a\\x19\\xcc\\xc7y\\xb2\\xc8\\xad\\xfa\\xb5\\xef\\xae\\x91\\xd2o\\x08\\xeaW\\xb2\\x1f\\x93\\xf2G\\xa0\\xecJQ\\xc49\\xc7w*?\\xc8\\x06\\xdcq7\\xa8f\\x12\\xd1i\\xfd\\xda\\x98j\\x7f\\'\\xbe\\xa0\\x81\\x95\\xb7 \\x93/\\xf2\\x9c\\']\\r\\xc2\\x97\\xeb+\\x8c\\xf8\\xa2f\\x05\\x18\\xf6\\xd9J9\\x00?\\xa5\\xc6\\xdf%\\x8eY\\x1ffE\\xbe\\xaaB#\\xbe\\xa4\\xf5y\\xda\\xe8y4\\x10\\x7f\\xd9\\xdf\\x145|c.\\xd0\\xf7\\x99\\xff\\x07\\xbe\\xef\\xb7<3\\xfc\\xa6\\xae\\xec\\x9fz1z\\xf6\\x97\\xeb\\x8e\\x9b\\xd9?\\xc0\\xff\\x12\\xcf\\x06\\xfa_\\xbf=^\\xc82\\x1e\\xc9P\\xfd/ \\xfe\\xd2t\\xf1\\xf7\\xccz\\x17\\x86\\x8c\\xb3a\\xff!\\xcf\\xa3\\xc2\\x17\\xfd\\xda4\\xfd\\xda\\x157G\\xcf\\xc32\\xe2\\x96\\xb4v\\xf6\\xd7c\\xdf\\xb3\\xa3\\xd9AQ\\xc7\\x17\\xfd$\\x80\\xbeD\\x14p\\xc0\\xcf\\xd79\\x83z\\xfc\\x0f\\xe7\\xb7\\xa0\\xad\\x8d\\x87\\xd4\\xe9t\\xf1\\xb0{D\\xd1\\xd3\\xaa\\xf5\\' 0n\\xdd\\xf1\\xe3\\x8d\\xf1\\xb6\\xa0=L\\x9a\\xde\\x84\\xaa3^K\\x9d\\xa7N{11\\xc5\\x8e\\x1f2\\x1f\\x84\\x83\\x9f\\xa3\\xab\\xbf/\\x13Q\\x80\\xa3\\x97\\x1c\\xf1X\\xbewR\\xe74c}\\xb6\\x13{\\x0ex\\xb0\\xb7\\xc4\\x83\\xccl\\xa7\\xf2\\x96\\xd1\\xf3\\xa4e\\xb4i\\xcfa3lY\\xf4Z\\x86\\xfe#\\xdd\\xc8\\xb7u\\xa7\\xcbr\\x0f\\xe1\\xd0\\x8a5mV\\xf8kLz\\xbf\\xdeDTg\\xe4\\x15v\\x189\\xc1\\x161\\xf6\\xa8\\x896\\x1c9\\xden\\x86]c\\xf5N\\xe3\\x9c\\xf7\\'\"\\x9bQ\\xe6\\xf6]?\\xbeZ\\xd1\\x8a\\xa1\\xef\\x84\\xc6\\x15<\\x8b\\xbfiUdL\\xb0%\\xa3\\xdd-\\xde\\x8963\\xbb\\t\\xbf\\xfc9\\xcf\\x85O\\xbft(1)\\xde\\xe4\\t\\xefJH\\x9cb\\xc7\\xbc\\x85-\\xd8\\xbc\\xcd\\x85\\x7fn\\xf9\\xadl.\\x99\\xbd3\\xbb\\xb0C]\\x14\\xf3LM\\xa8s[\\xf4\\xe3\\xe9\\xc6\\xb8\\x88\\x10W\\x16}uW\\xef\\xf20l!bs\\x8b1G\\x85\\xc0u\\x8b\\x9eV\\xf4\\xd5Q|\\x07\\xf7\\x11\\xb9Z}\\x0b\\x9f\\x16uS\\xf7\\x7f\\x04\\xbb\\xba\\x96#\\xfaI\\xc1\\x1b\\xb6\\x9d\\xcb\\xbb\\x03\\x8c\\xc1\\xcf\\xd8\\xa8v\\xc6\\x9es0\\xd6\\xf7:c=\\xcb\\x19\\xeb.h9c\\xdd\\x04E\\xba_MN\\xd3#t\\n\\xdd\\x02C`\\tL\\x81\\xfdo\\x00\\x00\\x00\\xff\\xff\\xc6\\xf9Yo6\\x15\\x00\\x00'\n",
" |###[ HTTP/2 Frame ]### \n",
" | len = 0x167\n",
" | type = HdrsFrm\n",
" | flags = set(['End Headers (EH)'])\n",
" | reserved = 0L\n",
" | stream_id = 1L\n",
" |###[ HTTP/2 Headers Frame ]### \n",
" | \\hdrs \\\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 8\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 33\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 22\n",
" | | | data = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 36\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Literal\n",
" | | | len = 2\n",
" | | | data = 'HPackLiteralString(-1)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 24\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 13\n",
" | | | data = 'HPackZString(private, max-age=0)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 31\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 22\n",
" | | | data = 'HPackZString(text/html; charset=ISO-8859-1)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 0\n",
" | | \\hdr_name \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Literal\n",
" | | | len = 3\n",
" | | | data = 'HPackLiteralString(p3p)'\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 81\n",
" | | | data = 'HPackZString(CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\")'\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 78\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 54\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Literal\n",
" | | | len = 3\n",
" | | | data = 'HPackLiteralString(gws)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 28\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 3\n",
" | | | data = 'HPackZString(4420)'\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 72\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 0\n",
" | | \\hdr_name \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 11\n",
" | | | data = 'HPackZString(x-frame-options)'\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 9\n",
" | | | data = 'HPackZString(SAMEORIGIN)'\n",
" | |###[ HPack Literal Header With Incremental Indexing ]### \n",
" | | magic = 1\n",
" | | index = 55\n",
" | | \\hdr_value \\\n",
" | | |###[ HPack Header String ]### \n",
" | | | type = Compressed\n",
" | | | len = 165\n",
" | | | data = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n",
" | |###[ HPack Indexed Header Field ]### \n",
" | | magic = 1\n",
" | | index = 71\n",
" |###[ HTTP/2 Frame ]### \n",
" | len = 0x122b\n",
" | type = DataFrm\n",
" | flags = set(['End Stream (ES)', 'Padded (P)'])\n",
" | reserved = 0L\n",
" | stream_id = 1L\n",
" |###[ HTTP/2 Padded Data Frame ]### \n",
" | padlen = 230\n",
" | data = '\\x1f\\x8b\\x08\\x00\\x00\\x00\\x00\\x00\\x02\\xff\\xc5:\\xebz\\xdb\\xb6\\x92\\xff\\xfb\\x144\\xfcU\\x96\\xd6\\xb4DR7R4\\x9d\\x93:n\\xe2n\\xda\\xa4\\'\\xc9I\\xcf\\xa6\\xa9>\\x90\\x84(\\xc6\\xbc\\x99\\x00e;\\xb2\\xdem\\x1fg\\xf3\\x16;\\x03^D\\xc9N\\xd2o\\xff\\xec\\x97DC\\x003\\x03\\xcc\\x053\\x03 \\xa7\\x07~\\xea\\x89\\xbb\\x8c)K\\x11Gg\\xa7\\xf8\\xab\\x84\\x82\\xc5\\xdcK3\\xe6\\x10\"\\x1b\\x88\\xe0\\x90\\xa5\\x10\\xd9l0\\xe0\\xde\\x92\\xc5\\xb4\\x9f\\xe6\\xc1\\xe0=s_\\xd3\\x80\\x11%\\xa2I\\xe0\\x90EN\\x80\\x03\\xa3\\xfe\\xd9i\\xcc\\x04U\\xbc4\\x11,\\x11\\x0e\\x11\\xecV\\x0c\\x90\\xb5\\xadxK\\x9as&\\x9cwo\\x7f>1\\x89\\x82<O\\xd8u\\x11\\xae\\x1cr^\\xa2\\x9f\\xbc\\x85\\xd9\\xc8>\\x8bA\\x18\\xc3L|\\xe0\\xe64\\xf1\\xc3$\\x18\\x04i\\x1aD,\\x18\\xe8\\xb7\\xf5\\xe7\\x9c\\x0b\\x18\\xa3\\xb9?\\xf7\\xd2(\\xcd\\xe7\\xbaa\\xfaY?K\\x82R\\x88,O3\\x87H6\\xc0]\\x84\"bg\\xcf%\\xe5\\xe9\\xa0l\\x9dr/\\x0f3q\\xd6]\\x14\\x89\\'\\xc24\\xe9\\xf6\\xd67a\\xe2\\xa77\\xfdr\\ng}uq9;z\\xf5\\xf9\\xe7\\xdf\\xdf\\xff2?y9z\\xf5_\\xf4ul%\"xu\\xa4^]\\xfc\\xf1\\x1a\\x06\\xa7cmj\\xe8\\xaa>\\x1c\\xeb\\x966T\\x87SM3FCu\\xa4\\x19\\x96\\xa9\\x8f\\x01\\x0e\\x8d\\xc9t\\x8a\\xd0\\xd4t\\x03\\xe0H7-\\x0b\\xe1pd\\xc9\\xf6\\xd8\\x1c\\xe9\\x08\\xcd\\xe1\\x08\\xf1\\xc6\\xe3\\xe9\\x08\\xe9&\\xc6d2A8\\x9e\\x9a\\xd8?\\x99\\x9a\\x13\\r\\xa19\\x1eKh\\x99C\\xb3\\x84\\x92~jL4C\\xc2\\xe9\\x14\\xe9\\xa7C\\xe0%\\xe1\\xd40%\\xb4\\xc68/p\\xb7\\xa6\\x12Zc9>\\xd1\\xac\\x12ZC\\xbd\\x84r}Ss$\\xf9\\x03\\x1cO$\\x9cNF\\x08-]\\x93mk4\\x92\\xf3Y\\xb0R\\tM\\xab\\x1c\\xb7\\xc6\\x08A\\xdc\\t\\xcec\\xea\\xda\\xb0\\x86\\xc8\\xd744\\xc9\\xcf4\\xf4\\xc9XBC\\x97\\xe3\\xc6D\\x97\\xe3\\xa0\\x069>\\x02\\rJ8\\x94\\xfa4a\\xbd\\xb2\\x7f\\xac\\x8d%\\xfexbH8\\xd1t]B\\xc3\\xd2$4\\'\\x12\\x7f:\\xd5%\\xfd\\xd4\\x92\\xfa7\\x91a\\t\\x87\\x93\\x12\\x8e\\xe4\\xb89)\\xf9[\\x9aV\\xc2R>\\xd3\\x1a\\x96\\xeb\\xb6\\x86\\xa3\\xb2=2\\xe5<\\xd6X\\xea\\xc5\\xb4&V\\xd9?\\x1d\\xe9\\x15D\\xfe\\xc0\\xc6\\x9cH8\\x1c\\x1b\\x12\\x8e4\\xbd\\x84\\xd2\\xae\\x16hf\\xa2\\x9aCM\\xd3\\xac\\x12\\x1aSC\\xc2\\xd1\\xd4TA\\xba\\xc9\\x04\\xfc\\x06\\xe0t\\x08\\xf3!\\x1c\\x81^\\x10\\x9ac\\xb3\\x84\\x96l\\x9b\\xda\\xb8\\x82\\x13\\x89o\\x8eA~\\x84\\x16\\xe8\\x07\\xa0\\x05\\x9c$D\\x7f\\xd45\\x03&4\\x87\\xe8\\xa8\\xf0a\\x18G*-\\xc4\\xb2\\xe0,\\x9fi\\xea\\x15\\xf7\\xf8\\xec\\xc8\\xb3<K7\\x17\\xda\\xdc\\x18\\x1dm\\xecr\\x0b\\xf4\\xaf^\\xbct\\x8e\\x16\\xf9\\x91\\xbd\\xe9u{v{\\xabT\\x08\\x91\\xe7|\\xf8XcG\\xa1\\xa3\\xd5\\xdf\\x01\\x13\\x17\\x97NC@{\\xebE\\x9awW4W\\\\\\x9bv:\\xdd\\x03\\x8a(O\\x85\\xc8C\\xb7\\x10\\xec\\xfe\\xfe\\xa0\\xeb:\\xbb}]\\xc2B\\x9f\\xf4z=\\xbbGa(\\xa39\\x04\\x87\\xdfR\\x9f\\xd99\\x13E\\x9e(\\xee\\xfd}\\xbd\\xce\\x8b\\xcbMk\\xe6\\x97_\\x9b\\xdaI\\x8a(\\xfa\\xfb\\xf3G\\xdf[@3)\\x866\\xee\\xb4\\xf4Sb\\xc80\\xcag\\xc4q\\xaa\\xd0\\x12\\xa5\\x1eE\\x8c>\\x04(\\x91B\\xe8j8\\xc4\\xd1Cr\\x05\\x97\\xdb`\\xdc\\xb40\\xa8\\xea\\xf6\\xd6\"\\xbf[7\\xd4\\xdd\\x8b<\\x071iO=\\xd0ap\\x03\\xf3x\\xcb\\xae\\xd7[o\\x1a\\x06\"\\x8c\\xd9\\xc3I\\xba\\t\\xbbQ\\x9eQ\\xc1z(\\xfd[\\xc0\\xe9\\xf6\\x1a\\x92(\\rv&U=\\xd5W\\x83\\xde\\x9a:[\\x84wy\\xd4\\x1a\\xb2\\xc3E\\x97\\x90\\x03\\x07\\xd4\\x0e\\xea\\x06\\xd6\\x97\\x18\\x84mT?k\\x88<u\\xd1|\\x876\\xfb\\xb0\\xf8\\xe8\\xb8\\xb6\\xdbO\\x13\\x86B8\\xf8\\x15\\xa5\\xd4\\x97\\x1f\\xd4Ms\\xd1^\\xb6\\xcf\"&\\x98\\x82T\\x1b{\\'dw:;\\xcd\\xfe\\x8aE\\x8ft\\xf5\\xa3\\xe2\\xf1^P\\x1e,\\x82\\xe7\\x9eC[.\\xbd8\\xd67m}\\x80\\xb8\\x8f\\xaa\\xa4\\x94\\x90\\x90\\x96h\\xfc\\xfe\\x9e\\x10\\xdb\\xbb\\xbf?\\xd1\\x0f@\\x16\\xceh\\x0e6!\\x1d\\x16:\\xa4w\\x7f\\xdf\\x05t\\xf9}\\xdc\\xde4]\\xbf\\xa7\\x9e\\xe8N\\x1b?\\x92\\x04\\xe0\\xb5\\xbe\\xb3\\xe3\\xe4\\x80\\x8a\\xbd\\xec\\xd8\\xa9p\\x8e\\xa1\\xc3\\xa6\\x0e\\xccH\\x06\\xe4\\xb8\\x1b\\x00\\x0cX27\\xb4\\x11\\xe9\\x1d\\x93\\'\\x14r\\xbb\\x13v<H\\xb1\\xc7\\xf4\\x98t<P19v\\x8f\\xd9\\xf1\\x02Z\\x9fo\\xb7+\\x11\\xd2\\r\\xec\\xc1_e\\x1d\\x10\\xf6\\x05\\xe3\\x02\\xf4\\xd3\\xe9\\xb4\\x1d\\xbe\\x8b\\xb3\\xef{ \\xa1D\\xfa\\xe0\\x1a\\x149\\xa3j\\x10\\xc5\\xf1L\\xdf\\xf4T\\n\\xba\\xe9\\xd5;\\x876\\x1a\\xbds\\xd6\\xcd\\xf7\\xed\\x9e\\x83\\xd7(\\x1fh?\\xf4?:\\x1f\\xa0\\xf3c\\xc5\\xe1@\\xdf\\xda\\xe4\\xba\\x1d\\x83\\xd0mv\\xcd\\xb3\\rV\\xd7\\xfd\\xac\\xe0\\xcb\\xee\\x87\\x0f\\xf4#\\x0e|l\\xfb9\\xf5\\x9fF\\xfb\\x1bl\\x9f\\x0e\\xe7\\x07\\x9aM\\xaf\\xef\\xd1(\\xea\\x8ae\\xc8{\\xd2\\xb3\\xe9\\xfe\\xfeV1\\x98,s\\xb6\\xe8C?\\xbb}\\x05{\\xe2\\x90\\xc8\\xbd\\xa1\\x9d:n\\xe9,^\\x8d\\xc2\\x0b\\x97C\\xccI\\x82\\xae{\\xac\\x83\\xd2\\xbb\\x7f\\xddwz\\xd7\\xce\\xa0T\\xba\\x07JF\\x7f\\xf0vXu:\\xb4\\x9f\\xb3,\\xa2\\x1e\\xc4\\xa9A\\xe9)O\\xc8\\xb1\\xd7t\\x96\\\\\\x16\\x99\\xf3\\xe1\\xaf\\xce\\xc7\\xff\\x18\\x04*A\\x17\\x90&_\\x12\\x10\\xe2tP\\x15@\\xa7\\\\\\xdcA=t\\x18\\xb84W\\x0f\\x03L\\n\\x100\\xa14\\xe3\\xe1g6\\xd3\\x87\\xd9\\xad\\x9dQ\\x1f\\xcb\\xb0\\x13\\x91f3=\\xbbU\\x0e\\xc28\\x83MI\\x13ao$\\xddz\\xc9\\xc2`)f\\x86\\x91\\xddn*\\x1e5\\x91\\x9b\\n\\x91\\xc6\\xb3\\xe9.\\x1dV\\x89\\'4\\n\\x83d\\x96#\\xe9\\xa6\\x1f\\xb8K\\x15~\\xfc5\\xecw\\x9f\\xe5\\xcdd<\\x8dB_9\\xf4,\\x7f\\xba\\xd0\\xed\\xd6\\xca`*$\\xaa\\xe7\\xd6\\xec,\\xe5!*\\x7fF] \\x82\\x08n#\\x0fc\\x04\\x12\\xdc\\x84\\xbeX\\xcetM\\xfbq\\xf3\\x8f\\x98\\xf9!U\\xc0\\x80k \\xd7\\xdbK\\xb7c\\x9a\\x07ar\"W4\\xeb\\x8fYl\\xafX.B\\xb0v\\xb5V`XI\\xbc\\x00\\x97\\x11\\xb3\\x88-\\xc4fC\\x91\\x91\\x8a\\xbf\\xa3\\xb5\\x14\\xccg^\\x9aKG\\x98\\x15`\\xb4<\\n\\x13\\xd6\\x92~\\x87@\\xd6\\xaf\\xb3CM\\xf3\\xda\\x180\\x14*\\xedq\\xdf7\\x991\\xddCY\\xec\\xa0@\\xf1\\xd1\\x1e\\xff\\x01L,M[Y\\xd8M\\xfd;U\\xf8*U3\\xb5\\xbf,m\\xbc\\xa0q\\x18\\xdd\\xcdh\\x1e\\xd2H\\xe54\\xe1\\'`\\xbap\\xb1A\\xdcu\\xa9\\rPl\\nZ\\x00yoN\\xeef\\xe04)\\xe4\\xa4\\xc3 \\rj\\x0b\\xcf\\xc0E\\x14\\x13\\xfei\\x1b\\xe1\\xafQ\\xd4\\x93J\\xa7}\\x93\\xc5\\xb0L\\xea\\xcdceoH\\x07\\x7f\\xd8@^\\x8e\\xabYj7144\\xeb\\xb2\\x16i8\\xf16\\xfd\\xeb\\x96\\x8e6}\\xc1\\x91W=\\xb7\\x86\\x1d\\xb5\\xcb\\x00ZD3\\xcef\\xf5\\xc7\\x86\\xc5\\xa5\\x9c7\\xe5\\xacn\\x1a\\xf9\\x95\\x0b\\xa1Jf\\t,\\x80F\\x1b\\x88\\xd4\\xa2\\xf1\\x83q\\xe3.#k\"}\\x8c/BU\\xa2 \\xe5LGQ\\x1f(\\x0c\\xb1x\\x850}\\x14\\xc1\\xe7k?\\xe4\\xb09\\xeffa\"U\\xe1\\xa6\\xb7\\xf6~\\x17\\x04\\x90\\xab\\xca\\r\\xa5^5e\\xb4\\xf5K\\xf4\\xb6\\x19\\xb47a\\x92\\x15b\\xc7\\x82a\\xb2\\x84i\\xda\\x9ee\\xc8\\xdf\\xe1\\xae\\x97\\xe9\\xfa\\x8e\\x97I3\\xbb\\xd4\\xbb\\n\\xf2\\x14\\x1cuv\\xb8X,\\xec\\x12\\xd5\\x85(r\\xb5\\xa1-B{\\xdf\\xb5\\x13\\xc8\\xd7\\x1b:[\\xa2{\\xa8tF!r\\xae\\xd8\\xd77\\xc0\\xa6\\xbf\\x88\\x14\\xda\\xb6,\\x9d\\xadB\\xd8\\xb2\\xcc\\xaf;\\xc7c\\x9d\\x9a\\xee\\xdf\\xdbO\\x12kX\\xce\\xfe\\x00K.\\xed0\\xc0\\xf3\\xa9\"\\x95Q\\xe1U\\xf3\\x80\\x98;;\\x89\\xbb\\x91\\xb7nG\\xb91\\x1a\\x1e{a\\xc1\\xb5\\x89vlc\\xa0mv\\xec\"#e+<\\xc9\\xf8\\x14q\\xd7\\xddQ0c\\xcc.\\xbduV\\x066@\\xb3\\xb7\\xee\\x8b\\x8b\\xf3<O9\\x84cX\\xf5\\x03M\\xbb\\xf2\\xcd\\xa1\\xd6\\xf0\\xdcY\\x14hVD\\xea\\xe1\"\\x8aZ\\xcb}\\xcc\\xa34E7*\\x16\\xedU\\x15P\\xc1\\xd5g\\xee\\x84\\xae\\xe6P\\xe5\\xa4\\x86a\\xe1q\\xba\\x07\\x1ex\\x02\\x873\\x10\\x172\\x0b\\xa3\\xe2\\xa4^\\xae\\xd4\\xb1\\xdd\\xecL\\xcd\\xf6\\x8a\\x9c\\xc3w\\x96\\x86p\\x8c\\xcf\\xdbk\\xb6\\xb7\\x91\\xa4\\x10\\xb8*\\xf8*\\xb7\\xca\\xf8\\x91\\xad\\xf2X\\xcc\\xc5\\x15\\xd7\\x0e\\xd6V\\'(G\\xee\\xde\\xd9\"\\xf5\\n\\xbe\\xae\\xd9K\\xf3o\\xc3_\\x95\\xe8\\x9a\\x8c\\x078W\\n\\xa6\\xdeG\\xae\\x1a\\xa00\\xf7\\x0bO\\x0cB/m\\xee\\x1a\\xa2\\xd4\\xcf\\xfa\\xd0A@\\x07\\x91C\\xf8\\x12\\xfc\\xc6+\\x84\\x02]\\t\\x01\\xbe\\xe55\\x08n&\\xc5\\r\\xa4F\\x1c\\x82>F\\x1e\\xbde\\xc0\\xdc\\x8fE\\xe6\\xd1WT~$K\\x8a\\x90q(\\xbdi\\xc4\\x99\\xed\\x83l1\\x1c=\\xfa8CU\\x1a+\\x8e\\xf2\\xf0\\xe2\"Q:\\x1d\\xa5\\xfe\\xeeb\\xb9\\xa1t\\x1b\\xe2r\\xb2\\xde\\xba\\xa9\\xc9\\xbb=Y\\xeb\\xc2?{\\xf3\\x03\\xa2\\x1e\\xe0\\x9cP_\\xd7\\x14\\x8bNg\\xfb\\xdd\\xbf\\xeeK\\x1d\\x03\\xdb\\xa63p\\xaf\\xdb8\\xd8l\\xa1m~\\x80?xn\\xdc*\\xde\\x0fWJ\\x085g\\x9c\\x04.9S\\xea6&\\xd4\\xb3\\xd3$u\\xe1\\xd7U\\xbc\\x88r\\x0e}\\xfa\\xd9?\\x99\\x07Q\\r\\xfe\\x9d\\x0e\\\\\\xc0\\xa6\\xdb\\xa1\\xcaz\\xe5\\xf1j0\\xb8\\xb9iJ\\xf9E\\x0ej\\r\\x96\\xd9\\x93%TsyGP\\x17j3r&%\\xe6\\xa7\\x03\\xfaM>1$\\x8d\\x16#l\\xb6\\xf9D\\xe4\\xecW\\xe8\\xfa\\x1e\\x17\\xdc~5\\x17/\\x8d\\x07m\\x16&9{\\r\\xc3\\xdfc\\x81\\x02\\xdd\\x817\\x17n\\xc5\"\\x88\\x9c\\x9f\\xffY\\xb2\\xd0\\xc9\\xd9\\xbf\\xd3\\xe2-\\x0c}\\x8f\\x0b\\x98\\xba-Nr\\xc3w\\xf5\\x02\\xce\\xfb\\xd4\\x13\\x05l3\\xf1\\xe5o\\xe8&\\x8c\\xdaRa{\\xf0D\\xf2\\x89\\xc9\\xd9sl~\\x8f\\x85\\x9f\\xc3\\xfe\\xdd\\xd1\\x8c$O\\xc9\\xd93\\x1cyH.7py\\xa5\\xb8\\x1f\\xdd\\xc9\\xb7] \\x11\\xd1\\x00`\\x9a!\\x01\\x1f\\xc0N,@\\xf1\\x05HY\\x9c)\\x9d\\x9c^\\x17\\xa9\\x8d\\xf3\\x9d\\x0eJ\\xb7\\x1b\\x80+6\\xfe)\\x0bXE\\x16\\x01\\x0e\\xd6\\x8c\\xb5o\\xf2\\x8c&\\xa5\\xbf&\\xcd\"C\\x8c+\\xd0\\xdf\\x1e]4\\xa3\\x8bGFY\\xd3G[2<\\x10\\x01\\x0e\\x17\"\\xcd\\xefP\\x04p\\x84\\xd2l\\xa4a<:{!\\xc7\\xc3\\xeb\\x82)\\xef\\x99+uw\\x8f\\xda\\xab\\x03[\\x06\\x80\\xe5,\\xf1\\x18\\x7fH\\xfc\\x9a\\xe64\\xfe\\x1f\\x91W[B\\x12\\n\\x08\\xd2L8s\\x88\\xb7\\xe5B\\xe7SmO\\xc9\\xd4\\xf3 \\xee\\n\\xde\\xb6\\xe1\\x1b\\x96\\xafB\\x8f\\xbdL!\\xc2W\\xce\\x95\\xc14`OG\\xe4\\x05\\xeb\\xe0\\xadn\\x98\\x14\\xccy\\xdcR\\xedU\\x9d\\xa7I\\xc2n\\xc1`\\x8f[\\xa6F\\\\V~!\\xd3\\xae\\xf6-\\x8c\\xb2\\x90\\xafQ\\x94\\n\\xd3c\\x98\\xa0 \\xd4\\xc0\\x19,\\x82\\x93\\x93C\\xe00@d`\\x8a\\x82\\xcc\\'\\xdb8\\x15\\x05\\xb4jU\\x9eX\\x97\\x9d\\x86\\xacw\\x15H\\xf9\\xbb\\xe3uu\\xabkM\\x15iL\\'\\x98\\xe2\\x1f\\xcf\\xb6{7\\xdc\\x98\\x05\\xb6\\x97\\xdc\\xd8\\x9a\\xdf,\\xa1@\\x9ao\\xc9\\xab\\xfbncj\\xdcZFy\\xe5\\xddS\\x92\\xf4\\xa4\\xcc\\xceD\\x91\\xb7\\xdb\\x0e)/\\xbb\\x89\"S(\\x08\\x02\\xaa*%\\\\f\\xc8\\x96(\\xd5\\r\\x0bi\\x0e\\xaeQ\\xa7\\x03?\\xdd\\xde\\xae@U~\\x9fN\\xa7\\xed\\xdafR\\x97:\\xed\\xba\\xba9~A\\x92\\xa4\\x98\\xa9\\xe5\\xf1k\\x8a\\x9a\\x90\\x962\\xb0r&\\xb0\\xd6\\x9b\\x9cf\\x0e!g?\\x83\\xf0\\x1e\\xab\\x8c\\xd2\\xfe\\xdd\\x9a\\x1dO\\x08\\n\\x95i\\xce\\xa9\\x8f\\xb9\\xc0\\x82\\xc6\\xb04L\\xaf\\x10?\"\\xa6x,\\x8a*\\xcb8D#\\xb2\\r;\\xcc\\xab\\xda\\x80\\x96+\\xabJ\\x13\\xb0&\\xec\\xf0\\xab\\xedM\\x8c\\xf1\\x8f\\xe4\\xac\\x93\\xb8<\\x83x |9T\\xa1\\x96~\\xd2^\\xf1\\xa9,\\xbc\\xab\\xf9CP/p\\x05\\xcf&\\x97o^\\x9d\\x98\\xe6\\xd8:\\xd1\\xc1\\x00\\xe5\\xfbI\\xe8\\xfb,i(*<\\xdc\\x84%\\xf12\\xfa\\nf9\\xcc\\xd3\"\\xf7\\xd8\\x1eJ\\xcde\\x99\\xeda\\xbb\\xe1\\xcd7\\xb9\\xb9\\xe1\\xf2\\xc1\\xf8v\\xbb\\x10\\x9f\\x93=\\xff\\x1dn\\x0f\\xc3x\\xdeP\\xb4\\x86\\xe1\\xae[`\\xd9\\xd7\\xd4v\\xf5\\xde\\x18\\xd7\\xc7A\\x05\\xdd\\xe4a1\\x07NY\\xe0\\xddg\\x9c\\xe1=\\x9eCR(\\x94\\xea\\xa5@)\\xd7\\x88\\xd9\\xf8rS\\x06(\\xb5W\\xc7\\xf46bI \\xed\\xa7\\x8d\\xccZ\\xa9\\xd7 \\x07\\xf8\\xa7C\\xc6S\\xb2\\xf5\\xa5z\\xcd\\xed\\xe3\\'\\n$#\\xf2V\\x05\\xbb\\x1dXd7Bo\\xfb\\x9a\\xc5=\\\\S\\xa5j\\x91<\\xafu\\xcd\\x0b7\\x0e\\x05i\\xc2};\\x13\\xfc_\\xe7\\xfd\\xe5\\x88\\x86\\x8a\\xcf\\x94\\x88\\xe2\\xebZ\\xe2\\xb5\\'\\xbe\\xc4]\\xedE\\xa1w\\x05\\xce\\xb9\\x90\\xd7S}\\xdc@P\\x93I\\xea\\x9e\\xec\\x815{W\\xccwt[aP]*`\\x91\\xe6\\xda\\njR?M\\xfd\\x08\"\\xd3\\xd1w\\xa4\\xa8\\xf7J\\xb5F8\\xda\\xe1qi/\\xe04;gg\\xb75yo@\\xfd\\x15\\xca\\xe0\\xcf\\xab\\x0b\\xac2}\\xd08\\xb3\\xeb\\xf7\\t\\x07,\\xb5\\xd55E\\xf4/\\xb2P\\xd82\\xc1\\xf7\\xc8\\x02\\xa2)$\\xae4\\xe2_\\xe1\\xf1\\xaa\\x10a\\xc4\\x15\\xf0\\x81\\xa0\\x80\\xc4\\x89i\\x93\\x97Y\\x06\\xe5\\x18\\x08\\x8c82\\x98\\xd4\\xba\\xc7X\\x19\\xb8\\xabZ\\xbd\\xf2\\xf3\\xd1\\xdd\\xa8\\xa3jP\\xcd\\xdb\\xb4\\x817\\x1e\\x1c\\xf3\\x1ei\\'\\xa7\\xca\\r\\xb7a\\xd4\\x1c\\xfeh\\xc7p|\\xac7\\x1d^8\\x91v\\xf4\\xabk\\x06\\xa0I1\\x12}\\x85\\x0f$\\x1b\\xb1;V\\xedI\\xdd\\xc2\\xe3\\x15l\\xb6\\xf6u[\\x1d\\xd5$_\\xc8{-M\\xd6U\\x13\\xf5\\xb1bz\\x83whX=)Y\\xe1\\x82W\\x85\\x82\\x86U\\xc1\\xb0%\\xe1e\\xf6\\xdf\\xc5\\xf7\\x8f`\\x0eHHy\\xc8wm\\xb5\\xad\\x90\\x8b\\x9d\\x1aB\\xd7&\\x96\\xa6\\x8f\\xcc\\x89i\\xe2\\x83\\x98\\xa1\\x19\\xa6aT\\xa7-99_\\xa2\\xf8\\xc7\\xf5\\x13.}l\\xd1.\\x94I}|x&g\\xff\\xad\\xe0\\x03p\\xcaq\\xa7<B\\xf3x%\\xc2\\x99\\xc0\\x9a\\xc9O\\xa1\\x94M\\x9eT\\x9f\\xce\\xbb7\\xd2\\x97x\\x188\\xf3\\xf9\\xab\\x17\\xc9\\xafo/\\xce\\xaf\\xae\\xf4_\\x9f\\xaf\\xfex\\xf3\\x9f\\xc1\\xf3\\xd1s\\xfdi\\xfc\\xe2z|\\xf9\\xe3\\xf0Y\\xa5S\\x06\\xb1\\xbdzlF\\xe1J/ke\\xb7l?\\xb7N\\xf0O+\\xbd\\x9ahN\\xa8\\x9b\\xb2;[14}\\xa2\\x9c(\\x0f\\xc5\\xcdR4\\t(\\x1e\\xb4\\xbc\\xa2\\xde\\x1d\\x18\\x00\\xca\\xa7E\\x08\\xae)BY\\xd1\\xcb\\xca\\xee\\x9b\\xa4\\xe0\\x071/\\t}\\x99\\xba\\xab-\\x91mwy]+}\\xef\\xb5\\xbc\\xef\\xf9\\xa9\\xd3\\\\\\xc5\\xaae\\xe9\\xa3m\\xec\\xfd\\x83osS\\x1eB\\xa9\\x97\\xbfG4\\xd5\\xdd\\xe9{!y\\xe0U\\xf9\\x01\\xbd\\xbf?p{\\xe5]y\\x85R\\x1f6U\\xd0\\xf4\\xf9\\x9b7\\xfa9\\xa4\\x11({\\xf0z\\xdc\\x93\\x9f\\xbf\\xa6>{\\xe25x\\x17\\x11C0\\xf3\\xe4\\xe1Y\\xa5\\x8e\\xdf\\x87\\x08\\t=\\xf5\\xd4u\\xbb\\x9a\\x96v:n\\xa7\\xd3\\xa5\\x07\\xceV\\xae\\xbe\\x94\\xe6\\xfe\\xde\\xdd\\xe9,e\\xdd\\xbe\\x88@Y\\xd5%D\\xc5\\xbf\\x83\\x92%\\xbe\\xbb<\\xe9T\\x8f.\\x90\\xa3\\xabW\\x17\\xc8\\xc6\\xf2\\xd5e\\xf7\\xed\\xe7\\xea\\xe2\\xb2\\xb7\\xf7\\xb2\\xf0\\x95\\xc3\\xf3\\xed\\'\\xee\\x93\\xbd\\x13\\x0bv\\x86\\x8f_7\\xd4\\x9f\\x8a\\xd7u\\x1b\\xa3\\xf1\\xf2\\xa5\\x0fv\\xccC\\x035\\xe7y/\\x87\\x8a\\x92U\\x1a\\xec\\x92\\x927\\xe9\\xd9T\\xde\\x1b\\xb8\\xad{\\x00V\\xeb\\xf9\\xa7\\xbbK\\xbf[\\xae\\xb0\\xd7\\xa7Y\\xc6\\x12\\xff|\\x19F~\\x97\\xf66\\xaa\\xd6\\xdbT\\xc2\\xfa\\xd1\\xa7l\\xfb\\xd6\\xe2\\xaa\\xb4yk\\x01\\xd2\\x02X{H`o\\xb1\\x1doO7_wD\\xe0\\x90\\xc7\\xf8\"$\\xd5\\x07nT\\xbf\"\\xf5\\xea\\x8f\\xfe\"\\xcc\\xb9@\\x14t\\xb2-Y\\xc3i^{\\xdb\\xfc\\xfe~\\xdd\\xbc1\\xce\\xfb\\xf3gE\\x9c]\\xdczL\\x9e*\\xb7\\x02\\xb0\\xdeZ,\\xf3\\xf4Fa\\x9b\\xd6\\x84\\xf8\\x86\\x96\\xf3\\xc6?\\xca\\xa6|i\\xea\\x8bF\\xde\\x9d^\\\\D\\xc4\\x9d\\xfaA\\xb6\\xdbz\\x91\\xb5\\xdb\\xaa\\xeb\\x1e\\r\\x00s0\\x1f\\xc0\\xcf\\xd5\\x9f\\xb7C\\x1fZ\\xfde\\xd6g\\xc9\\xfc\\xdd\\x9b\\xfe\\xfb\\xdf\\x86\\x7fdo>\\x9f\\xfc\\xf4\\xdc\\xec\\xbf\\x1a\\xc48\\xce\\xdd\\xf9\\x92\\xa9\\xfe \\x17\\xd8\\xfa4\\xf0\\x11\\xe8\\x03\\xd9\\xfa\\xecA\\x0c\\xc89~>=\\x7fki\\xe9\\xf3\\x95\\xff\\x82N\\xdf\\xbe4\\xde\\xcf/\\x7f\\xffC\\xe7\\xe3\\x9f^\\xdf\\xfe\\xfb\\xf2\\x05{\\xb7Z\\xfe~\\xa4\\xfe\\xffM\\xdd\\xb3\\xb7\\xa6\\x82\\xea\\xa5VH\\x16{\\xce\\x9a\\xc8i\\xc8lM\\xa0\\x10H\\xc8\\x0cO\\x9e*\\xf1\\xda\\xdfrK\\x92\\x19\\x96\\xb8y\\x94\\xa6\\xf1\\t\\x94\\xd1*\\xf1\\x975\\x82\\xbf\\xbc\\x16\\xcd7\\x07D\\x18]Du\\xcf2\\xe5H\\xdcd\\x0b\\x18\\x0c\\xb9\\x0b\\xc4\\x86\\xa9\\x92O4&\\x10\\xf4\\xc8\\'\\x9e&YM\\x11\\xc5\\xf5W\\xcc\\x03\\x8eK\\xf3B\\x17\\xf8\\x91\\x8b\\xc5\\x82z,\\xc7\\x12.\\xaf+\\x1b\\\\\\xc9]\\x8c\\x83\\x9c\\xd3;\\xf6\\x19*\\x1d\\xe6\\xc19F\\x08\\xa6\\xa4\\xb9X\\xa6\\x01\\xd4QP\\x00\\xcd\\x001\\xf2\\xae\\xee\\x00\\xf3\\x97?\\x0bM3&\\x87C\\xcb\\xde/\\tqr9S\\xa2p\\xbaJ\\xc3\\\\\\xc1\\x84\\x0b\\xdd)\\xbfB)\\xaab\\x08h8\\ry\\x88\\x04\\x19li\\x189\\x973\\xf2\"\\x80\\xc3\\xa9\\x0c\\x1aTqAo\\xca\\x17\\xf1\\x05z3\\xc85\\xf1\\x17\\x86\\x84\\xab\\x14\\x12\\xbc\\x82K\\x18\\x9eW\\t\\xe6OR\\xdfY\\xfcI\\xe4\\xc0\\xc5r\\xe7\\x8a\\xa2D\\x1e\\xd0r\\xac_N\\x8a\\xcb|S2f\\xa8T\\xee\\x86\\xb8\\xc2m\\xc9\\x97\\xe1]\\xa8\\xfc\\x7f\\\\0\\x88\\xa7\\xbf\\xd9\\xc3\\xda{\\xa3\\x92\\x04MV\\xaa;]\\xe5\\xa0m\\xe8\\xcb\\xaeK+\\xc2\\xe2\\xe0T_\\x8d\\xe6\\x0b@\\xfc\\xf0\\x11\\x98y\\xd0\\xa7k\\xf8\\x01\\x8e3\\x06(\\xd2+ XY\\xcb\\xc4\\xba\\xf8\\xed\\xf5\\xbf\\x8c\\xf3k\\xfd_\\xcf\\x9e\\x16\\x93\\xc2\\x1fO\\xde~\\xbe\\xba\\xfb\\x1d\\'\\xf2\\x91\\xf7\\xf6\\xf5\\xba\\x8c%\\xe5\\xfbp+$m\\xa3@\\xcc\\xfcf\\xb3\\xc3w\\xf7(LB\\xb1\\xf5el\\x9579w\\xdd\\xa6S\\xe2U\\xba\\x04\\xd4\\xcd\\xa6\\x1d\\xc7>5\\x11\\xe5\\x13\\xec\\xbaV\\xe36|,\\xbc\\xb7\\x86!\\x00\\xdb\\xf2U\\xb0\\xbe\\x0f/\\x8b\\x12L\\x8cx\\x89\\x8d\\xff\\'\\xf0\\x7f\\x01\\xa9\\x9a\\xd7%#(\\x00\\x00'\n",
" | padding = '\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'\n",
"\n"
]
}
],
"prompt_number": 113
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, I don't know about you, but I can't read this :) Let's use the helpers to help us out.\n",
"\n",
"First we need to create a new Header table that is meaningful for headers received from the server. We set the various sizes to the values we defined in our settings."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"srv_tblhdr = h2.HPackHdrTable(dynamic_table_max_size=max_hdr_tbl_sz, dynamic_table_cap_size=max_hdr_tbl_sz)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 114
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's now convert all received headers into their textual representation, and stuff the data frames into a buffer per stream."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Structure used to store textual representation of the stream headers\n",
"stream_txt = {}\n",
"# Structure used to store data from each stream\n",
"stream_data = {}\n",
"\n",
"# For each frame we previously received\n",
"for frame in stream.frames:\n",
" # If this frame is a header\n",
" if frame.type == h2.H2HeadersFrame.type_id:\n",
" # Convert this header block into its textual representation.\n",
" # For the sake of simplicity of this tutorial, we assume \n",
" # that the header block is not large enough to require a Continuation frame\n",
" stream_txt[frame.stream_id] = srv_tblhdr.gen_txt_repr(frame)\n",
" # If this frame is data\n",
" if frame.type == h2.H2DataFrame.type_id:\n",
" if frame.stream_id not in stream_data:\n",
" stream_data[frame.stream_id] = []\n",
" stream_data[frame.stream_id].append(frame)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 115
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can print the headers from the Favicon response."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(stream_txt[3])"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
":status 200\n",
"vary: Accept-Encoding\n",
"content-encoding: gzip\n",
"content-type: image/x-icon\n",
"date: Thu, 08 Dec 2016 06:23:59 GMT\n",
"expires: Fri, 16 Dec 2016 06:23:59 GMT\n",
"last-modified: Thu, 08 Dec 2016 01:00:57 GMT\n",
"x-content-type-options: nosniff\n",
"server: sffe\n",
"content-length: 1494\n",
"x-xss-protection: 1; mode=block\n",
"cache-control: public, max-age=691200\n",
"age: 472252\n",
"alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n"
]
}
],
"prompt_number": 116
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So, we received a 200 status code, meaning that we received the favicon. We also can see that the favicon is GZipped. Let's uncompress it and display it in this notebook."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import zlib\n",
"img = zlib.decompress(stream_data[3][0].data, 16+zlib.MAX_WBITS)\n",
"from IPython.core.display import HTML\n",
"HTML('<img src=\"data:image/x-icon;base64,{}\" />'.format(img.encode('base64')))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<img src=\"data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAA\n",
"AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35\n",
"/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn/////////////////\n",
"//////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZ\n",
"p/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp\n",
"/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////\n",
"+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79\n",
"/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD////\n",
"///9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC\n",
"//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/\n",
"9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0\n",
"hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v//////////////\n",
"/////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6\n",
"///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/\n",
"NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/\n",
"////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAA\n",
"AAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+\n",
"CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z\n",
"/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj/\n",
"//8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
"AAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAA\n",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X\n",
"/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAA\n",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+\n",
"/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39\n",
"mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
"AAAAAP7+/gn9/f2K/f39+///////////////////////////////////////////////////////\n",
"/////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
"AAAAAAAAAAAAAAAAAAD+/v4k/f390v//////////////////////////////////////////////\n",
"//////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAA\n",
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v\n",
"16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39\n",
"/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q////////////////////\n",
"/+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf/\n",
"//////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390///////\n",
"///////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1Oo\n",
"NP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAA\n",
"AP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/\n",
"U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcA\n",
"AAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1Oo\n",
"NP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP/////\n",
"/////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/\n",
"U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0\n",
"hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LH\n",
"j/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P//////////////////////////////////////////\n",
"///8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln/////\n",
"///////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z/////////////////////////////\n",
"//////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg////////////////////\n",
"///+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w////////////////\n",
"//////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL/\n",
"/vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7\n",
"/fr//////////////////////////////////////////////////////////////////ere//SF\n",
"Qv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7\n",
"/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/\n
gitextract_vo5e70zj/ ├── .config/ │ ├── ci/ │ │ ├── install.ps1 │ │ ├── install.sh │ │ ├── openldap/ │ │ │ ├── config.ldif │ │ │ ├── install.sh │ │ │ └── testdata.ldif │ │ ├── openssl.py │ │ ├── test.ps1 │ │ ├── test.sh │ │ ├── windows/ │ │ │ ├── InstallNpcap.ps1 │ │ │ └── InstallWindumpNpcap.ps1 │ │ └── zipapp.sh │ ├── codespell_ignore.txt │ └── mypy/ │ ├── mypy.ini │ ├── mypy_check.py │ ├── mypy_deployment_stats.py │ └── mypy_enabled.txt ├── .git-blame-ignore-revs ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── BUGS.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── codecov.yml │ └── workflows/ │ ├── cifuzz.yml │ └── unittests.yml ├── .gitignore ├── .packit.yml ├── .readthedocs.yml ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE ├── MANIFEST.in ├── README.md ├── doc/ │ ├── LICENSE │ ├── notebooks/ │ │ ├── HTTP_2_Tuto.ipynb │ │ ├── Scapy in 15 minutes.ipynb │ │ ├── graphs-ipids.ipynb │ │ └── tls/ │ │ ├── notebook1_x509.ipynb │ │ ├── notebook2_tls_protected.ipynb │ │ ├── notebook3_tls_compromised.ipynb │ │ ├── notebook4_tls13.ipynb │ │ └── raw_data/ │ │ ├── README.md │ │ ├── pki/ │ │ │ ├── ca_cert.der │ │ │ ├── ca_key.der │ │ │ ├── srv_cert.pem │ │ │ └── srv_key.pem │ │ ├── tls_nss_example.keys.txt │ │ ├── tls_nss_example.pcap │ │ ├── tls_session_13/ │ │ │ ├── 01_cli.raw │ │ │ ├── 02_srv.raw │ │ │ ├── 03_srv.raw │ │ │ ├── 04_srv.raw │ │ │ ├── 05_srv.raw │ │ │ ├── 06_srv.raw │ │ │ ├── 07_cli.raw │ │ │ ├── 08_cli.raw │ │ │ ├── 09_srv.raw │ │ │ ├── cli_key.raw │ │ │ └── srv_key.raw │ │ ├── tls_session_compromised/ │ │ │ ├── 01_cli.raw │ │ │ ├── 02_srv.raw │ │ │ ├── 03_cli.raw │ │ │ ├── 04_srv.raw │ │ │ └── 05_cli.raw │ │ └── tls_session_protected/ │ │ ├── 01_cli.raw │ │ ├── 02_srv.raw │ │ ├── 03_srv.raw │ │ ├── 04_srv.raw │ │ ├── 05_cli.raw │ │ ├── 06_srv.raw │ │ └── 07_cli.raw │ ├── scapy/ │ │ ├── Makefile │ │ ├── README │ │ ├── _ext/ │ │ │ ├── linkcode_res.py │ │ │ └── scapy_doc.py │ │ ├── _static/ │ │ │ ├── _dummy │ │ │ └── vethrelay.sh │ │ ├── _templates/ │ │ │ ├── README.md │ │ │ ├── module.rst_t │ │ │ └── package.rst_t │ │ ├── advanced_usage/ │ │ │ ├── asn1_snmp.rst │ │ │ ├── automaton.rst │ │ │ ├── cbor.rst │ │ │ ├── fwdmachine.rst │ │ │ ├── index.rst │ │ │ └── pipetools.rst │ │ ├── backmatter.rst │ │ ├── build_dissect.rst │ │ ├── conf.py │ │ ├── development.rst │ │ ├── extending.rst │ │ ├── functions.rst │ │ ├── graphics/ │ │ │ └── fwdmachine.drawio │ │ ├── index.rst │ │ ├── installation.rst │ │ ├── introduction.rst │ │ ├── layers/ │ │ │ ├── automotive.rst │ │ │ ├── bluetooth.rst │ │ │ ├── dcerpc.rst │ │ │ ├── dcom.rst │ │ │ ├── dotnet.rst │ │ │ ├── gssapi.rst │ │ │ ├── http.rst │ │ │ ├── index.rst │ │ │ ├── kerberos.rst │ │ │ ├── ldap.rst │ │ │ ├── netflow.rst │ │ │ ├── pnio.rst │ │ │ ├── sctp.rst │ │ │ ├── smb.rst │ │ │ ├── tcp.rst │ │ │ └── tuntap.rst │ │ ├── make.bat │ │ ├── routing.rst │ │ ├── troubleshooting.rst │ │ └── usage.rst │ ├── scapy.1 │ ├── syntax/ │ │ └── vim_uts_syntax/ │ │ ├── ftdetect/ │ │ │ ├── filetype.vim │ │ │ └── uts.vim │ │ ├── install.sh │ │ └── syntax/ │ │ └── uts.vim │ └── vagrant_ci/ │ ├── README.md │ ├── Vagrantfile │ ├── provision_freebsd.sh │ ├── provision_netbsd.sh │ └── provision_openbsd.sh ├── pyproject.toml ├── run_scapy ├── run_scapy.bat ├── scapy/ │ ├── __init__.py │ ├── __main__.py │ ├── all.py │ ├── ansmachine.py │ ├── arch/ │ │ ├── __init__.py │ │ ├── bpf/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── core.py │ │ │ ├── pfroute.py │ │ │ └── supersocket.py │ │ ├── common.py │ │ ├── libpcap.py │ │ ├── linux/ │ │ │ ├── __init__.py │ │ │ └── rtnetlink.py │ │ ├── solaris.py │ │ ├── unix.py │ │ └── windows/ │ │ ├── __init__.py │ │ ├── native.py │ │ └── structures.py │ ├── as_resolvers.py │ ├── asn1/ │ │ ├── __init__.py │ │ ├── asn1.py │ │ ├── ber.py │ │ └── mib.py │ ├── asn1fields.py │ ├── asn1packet.py │ ├── automaton.py │ ├── autorun.py │ ├── base_classes.py │ ├── cbor/ │ │ ├── __init__.py │ │ ├── cbor.py │ │ └── cborcodec.py │ ├── compat.py │ ├── config.py │ ├── consts.py │ ├── contrib/ │ │ ├── __init__.py │ │ ├── altbeacon.py │ │ ├── aoe.py │ │ ├── automotive/ │ │ │ ├── __init__.py │ │ │ ├── autosar/ │ │ │ │ ├── __init__.py │ │ │ │ ├── pdu.py │ │ │ │ ├── secoc.py │ │ │ │ ├── secoc_canfd.py │ │ │ │ └── secoc_pdu.py │ │ │ ├── bmw/ │ │ │ │ ├── __init__.py │ │ │ │ ├── definitions.py │ │ │ │ ├── enumerator.py │ │ │ │ └── hsfz.py │ │ │ ├── ccp.py │ │ │ ├── doip.py │ │ │ ├── ecu.py │ │ │ ├── gm/ │ │ │ │ ├── __init__.py │ │ │ │ ├── gmlan.py │ │ │ │ ├── gmlan_ecu_states.py │ │ │ │ ├── gmlan_logging.py │ │ │ │ ├── gmlan_scanner.py │ │ │ │ └── gmlanutils.py │ │ │ ├── kwp.py │ │ │ ├── obd/ │ │ │ │ ├── __init__.py │ │ │ │ ├── iid/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── iids.py │ │ │ │ ├── mid/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── mids.py │ │ │ │ ├── obd.py │ │ │ │ ├── packet.py │ │ │ │ ├── pid/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── pids.py │ │ │ │ │ ├── pids_00_1F.py │ │ │ │ │ ├── pids_20_3F.py │ │ │ │ │ ├── pids_40_5F.py │ │ │ │ │ ├── pids_60_7F.py │ │ │ │ │ ├── pids_80_9F.py │ │ │ │ │ └── pids_A0_C0.py │ │ │ │ ├── scanner.py │ │ │ │ ├── services.py │ │ │ │ └── tid/ │ │ │ │ ├── __init__.py │ │ │ │ └── tids.py │ │ │ ├── scanner/ │ │ │ │ ├── __init__.py │ │ │ │ ├── configuration.py │ │ │ │ ├── enumerator.py │ │ │ │ ├── executor.py │ │ │ │ ├── graph.py │ │ │ │ ├── staged_test_case.py │ │ │ │ └── test_case.py │ │ │ ├── someip.py │ │ │ ├── uds.py │ │ │ ├── uds_ecu_states.py │ │ │ ├── uds_logging.py │ │ │ ├── uds_scan.py │ │ │ ├── volkswagen/ │ │ │ │ ├── __init__.py │ │ │ │ └── definitions.py │ │ │ └── xcp/ │ │ │ ├── __init__.py │ │ │ ├── cto_commands_master.py │ │ │ ├── cto_commands_slave.py │ │ │ ├── scanner.py │ │ │ ├── utils.py │ │ │ └── xcp.py │ │ ├── avs.py │ │ ├── bfd.py │ │ ├── bgp.py │ │ ├── bier.py │ │ ├── bp.py │ │ ├── cansocket.py │ │ ├── cansocket_native.py │ │ ├── cansocket_python_can.py │ │ ├── carp.py │ │ ├── cdp.py │ │ ├── chdlc.py │ │ ├── coap.py │ │ ├── concox.py │ │ ├── diameter.py │ │ ├── dicom.py │ │ ├── dtp.py │ │ ├── eddystone.py │ │ ├── eigrp.py │ │ ├── enipTCP.py │ │ ├── erspan.py │ │ ├── esmc.py │ │ ├── ethercat.py │ │ ├── etherip.py │ │ ├── exposure_notification.py │ │ ├── geneve.py │ │ ├── gtp.py │ │ ├── gtp_v2.py │ │ ├── gxrp.py │ │ ├── hicp.py │ │ ├── homeplugav.py │ │ ├── homepluggp.py │ │ ├── homeplugsg.py │ │ ├── http2.py │ │ ├── ibeacon.py │ │ ├── icmp_extensions.py │ │ ├── ife.py │ │ ├── igmp.py │ │ ├── igmpv3.py │ │ ├── ikev2.py │ │ ├── isis.py │ │ ├── isotp/ │ │ │ ├── __init__.py │ │ │ ├── isotp_native_socket.py │ │ │ ├── isotp_packet.py │ │ │ ├── isotp_scanner.py │ │ │ ├── isotp_soft_socket.py │ │ │ └── isotp_utils.py │ │ ├── knx.py │ │ ├── lacp.py │ │ ├── ldp.py │ │ ├── lldp.py │ │ ├── loraphy2wan.py │ │ ├── ltp.py │ │ ├── mac_control.py │ │ ├── macsec.py │ │ ├── metawatch.py │ │ ├── modbus.py │ │ ├── mount.py │ │ ├── mpls.py │ │ ├── mqtt.py │ │ ├── mqttsn.py │ │ ├── nfs.py │ │ ├── nlm.py │ │ ├── nrf_sniffer.py │ │ ├── nsh.py │ │ ├── oam.py │ │ ├── oncrpc.py │ │ ├── opc_da.py │ │ ├── openflow.py │ │ ├── openflow3.py │ │ ├── ospf.py │ │ ├── pfcp.py │ │ ├── pim.py │ │ ├── pnio.py │ │ ├── pnio_dcp.py │ │ ├── pnio_rpc.py │ │ ├── portmap.py │ │ ├── postgres.py │ │ ├── ppi_cace.py │ │ ├── ppi_geotag.py │ │ ├── psp.py │ │ ├── ptp_v2.py │ │ ├── ripng.py │ │ ├── roce.py │ │ ├── rpl.py │ │ ├── rpl_metrics.py │ │ ├── rsvp.py │ │ ├── rtcp.py │ │ ├── rtps/ │ │ │ ├── __init__.py │ │ │ ├── common_types.py │ │ │ ├── pid_types.py │ │ │ └── rtps.py │ │ ├── rtr.py │ │ ├── rtsp.py │ │ ├── scada/ │ │ │ ├── __init__.py │ │ │ ├── iec104/ │ │ │ │ ├── __init__.py │ │ │ │ ├── iec104_fields.py │ │ │ │ ├── iec104_information_elements.py │ │ │ │ └── iec104_information_objects.py │ │ │ └── pcom.py │ │ ├── sdnv.py │ │ ├── sebek.py │ │ ├── send.py │ │ ├── skinny.py │ │ ├── slowprot.py │ │ ├── socks.py │ │ ├── stamp.py │ │ ├── stun.py │ │ ├── tacacs.py │ │ ├── tcpao.py │ │ ├── tcpros.py │ │ ├── tzsp.py │ │ ├── vqp.py │ │ ├── vtp.py │ │ └── wireguard.py │ ├── dadict.py │ ├── data.py │ ├── error.py │ ├── fields.py │ ├── fwdmachine.py │ ├── interfaces.py │ ├── layers/ │ │ ├── __init__.py │ │ ├── all.py │ │ ├── bluetooth.py │ │ ├── bluetooth4LE.py │ │ ├── can.py │ │ ├── clns.py │ │ ├── dcerpc.py │ │ ├── dhcp.py │ │ ├── dhcp6.py │ │ ├── dns.py │ │ ├── dot11.py │ │ ├── dot15d4.py │ │ ├── eap.py │ │ ├── gprs.py │ │ ├── gssapi.py │ │ ├── hsrp.py │ │ ├── http.py │ │ ├── inet.py │ │ ├── inet6.py │ │ ├── ipsec.py │ │ ├── ir.py │ │ ├── isakmp.py │ │ ├── kerberos.py │ │ ├── l2.py │ │ ├── l2tp.py │ │ ├── ldap.py │ │ ├── llmnr.py │ │ ├── lltd.py │ │ ├── mgcp.py │ │ ├── mobileip.py │ │ ├── ms_nrtp.py │ │ ├── msrpce/ │ │ │ ├── __init__.py │ │ │ ├── all.py │ │ │ ├── ept.py │ │ │ ├── msdcom.py │ │ │ ├── msdrsr.py │ │ │ ├── mseerr.py │ │ │ ├── msnrpc.py │ │ │ ├── mspac.py │ │ │ ├── raw/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── ept.py │ │ │ │ ├── ms_dcom.py │ │ │ │ ├── ms_drsr.py │ │ │ │ ├── ms_eerr.py │ │ │ │ ├── ms_nrpc.py │ │ │ │ ├── ms_rrp.py │ │ │ │ ├── ms_samr.py │ │ │ │ ├── ms_srvs.py │ │ │ │ └── ms_wkst.py │ │ │ ├── rpcclient.py │ │ │ └── rpcserver.py │ │ ├── netbios.py │ │ ├── netflow.py │ │ ├── ntlm.py │ │ ├── ntp.py │ │ ├── pflog.py │ │ ├── ppi.py │ │ ├── ppp.py │ │ ├── pptp.py │ │ ├── quic.py │ │ ├── radius.py │ │ ├── rip.py │ │ ├── rtp.py │ │ ├── sctp.py │ │ ├── sixlowpan.py │ │ ├── skinny.py │ │ ├── smb.py │ │ ├── smb2.py │ │ ├── smbclient.py │ │ ├── smbserver.py │ │ ├── snmp.py │ │ ├── spnego.py │ │ ├── ssh.py │ │ ├── tftp.py │ │ ├── tls/ │ │ │ ├── __init__.py │ │ │ ├── all.py │ │ │ ├── automaton.py │ │ │ ├── automaton_cli.py │ │ │ ├── automaton_srv.py │ │ │ ├── basefields.py │ │ │ ├── cert.py │ │ │ ├── crypto/ │ │ │ │ ├── __init__.py │ │ │ │ ├── all.py │ │ │ │ ├── cipher_aead.py │ │ │ │ ├── cipher_block.py │ │ │ │ ├── cipher_stream.py │ │ │ │ ├── ciphers.py │ │ │ │ ├── common.py │ │ │ │ ├── compression.py │ │ │ │ ├── groups.py │ │ │ │ ├── h_mac.py │ │ │ │ ├── hash.py │ │ │ │ ├── hkdf.py │ │ │ │ ├── kx_algs.py │ │ │ │ ├── md4.py │ │ │ │ ├── pkcs1.py │ │ │ │ ├── prf.py │ │ │ │ └── suites.py │ │ │ ├── extensions.py │ │ │ ├── handshake.py │ │ │ ├── handshake_sslv2.py │ │ │ ├── keyexchange.py │ │ │ ├── keyexchange_tls13.py │ │ │ ├── quic.py │ │ │ ├── record.py │ │ │ ├── record_sslv2.py │ │ │ ├── record_tls13.py │ │ │ ├── session.py │ │ │ └── tools.py │ │ ├── tpm.py │ │ ├── tuntap.py │ │ ├── usb.py │ │ ├── vrrp.py │ │ ├── vxlan.py │ │ ├── windows/ │ │ │ ├── __init__.py │ │ │ ├── erref.py │ │ │ ├── registry.py │ │ │ └── security.py │ │ ├── x509.py │ │ └── zigbee.py │ ├── libs/ │ │ ├── __init__.py │ │ ├── bluetoothids.py │ │ ├── ethertypes.py │ │ ├── extcap.py │ │ ├── manuf.py │ │ ├── matplot.py │ │ ├── rfc3961.py │ │ ├── structures.py │ │ ├── test_pyx.py │ │ └── winpcapy.py │ ├── main.py │ ├── modules/ │ │ ├── __init__.py │ │ ├── krack/ │ │ │ ├── __init__.py │ │ │ ├── automaton.py │ │ │ └── crypto.py │ │ ├── ldaphero.py │ │ ├── nmap.py │ │ ├── p0f.py │ │ ├── p0fv2.py │ │ ├── ticketer.py │ │ └── voip.py │ ├── packet.py │ ├── pipetool.py │ ├── plist.py │ ├── pton_ntop.py │ ├── py.typed │ ├── route.py │ ├── route6.py │ ├── scapypipes.py │ ├── sendrecv.py │ ├── sessions.py │ ├── supersocket.py │ ├── themes.py │ ├── tools/ │ │ ├── UTscapy.py │ │ ├── __init__.py │ │ ├── automotive/ │ │ │ ├── __init__.py │ │ │ ├── isotpscanner.py │ │ │ ├── obdscanner.py │ │ │ └── xcpscanner.py │ │ ├── check_asdis.py │ │ ├── check_spdx.sh │ │ ├── generate_bluetooth.py │ │ ├── generate_ethertypes.py │ │ ├── generate_manuf.py │ │ └── scapy_pyannotate.py │ ├── utils.py │ ├── utils6.py │ └── volatile.py ├── setup.py ├── test/ │ ├── __init__.py │ ├── answering_machines.uts │ ├── benchmark/ │ │ ├── common.py │ │ ├── dissection_and_build.py │ │ └── latency_router.py │ ├── bpf.uts │ ├── configs/ │ │ ├── README.md │ │ ├── bsd.utsc │ │ ├── cryptography.utsc │ │ ├── linux.utsc │ │ ├── scapy-rpc.utsc │ │ ├── solaris.utsc │ │ ├── windows.utsc │ │ └── windows2.utsc │ ├── contrib/ │ │ ├── altbeacon.uts │ │ ├── aoe.uts │ │ ├── automotive/ │ │ │ ├── autosar/ │ │ │ │ ├── pdu.uts │ │ │ │ └── secoc.uts │ │ │ ├── bmw/ │ │ │ │ └── hsfz.uts │ │ │ ├── ccp.uts │ │ │ ├── doip.uts │ │ │ ├── ecu.uts │ │ │ ├── ecu_am.uts │ │ │ ├── gm/ │ │ │ │ ├── gmlan.uts │ │ │ │ ├── gmlanutils.uts │ │ │ │ └── scanner.uts │ │ │ ├── interface_mockup.py │ │ │ ├── kwp.uts │ │ │ ├── obd/ │ │ │ │ ├── obd.uts │ │ │ │ └── scanner.uts │ │ │ ├── scanner/ │ │ │ │ ├── configuration.uts │ │ │ │ ├── enumerator.uts │ │ │ │ ├── graph.uts │ │ │ │ ├── staged_test_case.uts │ │ │ │ ├── test_case.uts │ │ │ │ └── uds_scanner.uts │ │ │ ├── someip.uts │ │ │ ├── testsocket.uts │ │ │ ├── uds.uts │ │ │ └── xcp/ │ │ │ ├── xcp.uts │ │ │ └── xcp_comm.uts │ │ ├── avs.uts │ │ ├── bfd.uts │ │ ├── bgp.uts │ │ ├── bier.uts │ │ ├── bp.uts │ │ ├── canfdsocket_native.uts │ │ ├── canfdsocket_python_can.uts │ │ ├── cansocket.uts │ │ ├── cansocket_native.uts │ │ ├── cansocket_python_can.uts │ │ ├── carp.uts │ │ ├── cdp.uts │ │ ├── chdlc.uts │ │ ├── coap.uts │ │ ├── concox.uts │ │ ├── diameter.uts │ │ ├── dicom.uts │ │ ├── dtp.uts │ │ ├── eddystone.uts │ │ ├── eigrp.uts │ │ ├── enipTCP.uts │ │ ├── erspan.uts │ │ ├── esmc.uts │ │ ├── ethercat.uts │ │ ├── etherip.uts │ │ ├── exposure_notification.uts │ │ ├── geneve.uts │ │ ├── gtp.uts │ │ ├── gtp_v2.uts │ │ ├── gxrp.uts │ │ ├── hicp.uts │ │ ├── homeplugav.uts │ │ ├── homepluggp.uts │ │ ├── homeplugsg.uts │ │ ├── http2.uts │ │ ├── ibeacon.uts │ │ ├── iec104.uts │ │ ├── ife.uts │ │ ├── igmp.uts │ │ ├── igmpv3.uts │ │ ├── ikev2.uts │ │ ├── isis.uts │ │ ├── isotp_message_builder.uts │ │ ├── isotp_native_socket.uts │ │ ├── isotp_packet.uts │ │ ├── isotp_soft_socket.uts │ │ ├── isotpscan.uts │ │ ├── knx.uts │ │ ├── lacp.uts │ │ ├── ldp.uts │ │ ├── lldp.uts │ │ ├── loraphy2wan.uts │ │ ├── ltp.uts │ │ ├── mac_control.uts │ │ ├── macsec.uts │ │ ├── metawatch.uts │ │ ├── modbus.uts │ │ ├── mount.uts │ │ ├── mpls.uts │ │ ├── mqtt.uts │ │ ├── mqttsn.uts │ │ ├── nfs.uts │ │ ├── nlm.uts │ │ ├── nsh.uts │ │ ├── oam.uts │ │ ├── oncrpc.uts │ │ ├── opc_da.uts │ │ ├── openflow.uts │ │ ├── openflow3.uts │ │ ├── ospf.uts │ │ ├── pcom.uts │ │ ├── pfcp.uts │ │ ├── pim.uts │ │ ├── pnio.uts │ │ ├── pnio_dcp.uts │ │ ├── pnio_rpc.uts │ │ ├── portmap.uts │ │ ├── postgres.uts │ │ ├── ppi_cace.uts │ │ ├── ppi_geotag.uts │ │ ├── psp.uts │ │ ├── ptp_v2.uts │ │ ├── ripng.uts │ │ ├── roce.uts │ │ ├── rpl.uts │ │ ├── rsvp.uts │ │ ├── rtcp.uts │ │ ├── rtps.uts │ │ ├── rtr.uts │ │ ├── rtsp.uts │ │ ├── sdnv.uts │ │ ├── sebek.uts │ │ ├── send.uts │ │ ├── socks.uts │ │ ├── stamp.uts │ │ ├── stun.uts │ │ ├── tacacs.uts │ │ ├── tcpao.uts │ │ ├── tcpros.uts │ │ ├── tzsp.uts │ │ ├── vqp.uts │ │ ├── vtp.uts │ │ └── wireguard.uts │ ├── fields.uts │ ├── imports.uts │ ├── linux.uts │ ├── nmap.uts │ ├── p0f.uts │ ├── p0fv2.uts │ ├── pcaps/ │ │ ├── bad_rsn_parsing_overrides_ssid.pcap │ │ ├── doip_ack.pcap │ │ ├── http2_h2c.pcap │ │ ├── http_compressed-brotli.pcap │ │ ├── http_compressed-zstd.pcap │ │ ├── http_compressed.pcap │ │ ├── http_content_length.pcap │ │ ├── ikev2_nat_t.pcapng │ │ ├── ikev2_notify_redirect.pcap │ │ ├── ipfix.pcap │ │ ├── netflowv9.pcap │ │ ├── pfcp.pcap │ │ ├── ssh_ed25519.pcap │ │ ├── tls_new-session-ticket.pcap │ │ ├── zigbee-join-authenticate.pcap │ │ └── zigbee-transport-key-skke_1.pcap │ ├── pipetool.uts │ ├── random.uts │ ├── regression.uts │ ├── run_tests │ ├── run_tests.bat │ ├── scapy/ │ │ ├── automaton.uts │ │ └── layers/ │ │ ├── asn1.uts │ │ ├── bluetooth.uts │ │ ├── bluetooth4LE.uts │ │ ├── can.uts │ │ ├── cbor.uts │ │ ├── dcerpc.uts │ │ ├── dhcp.uts │ │ ├── dhcp6.uts │ │ ├── dns.uts │ │ ├── dns_dnssec.uts │ │ ├── dns_edns0.uts │ │ ├── dot11.uts │ │ ├── dot15d4.uts │ │ ├── eap.uts │ │ ├── hsrp.uts │ │ ├── http.uts │ │ ├── inet.uts │ │ ├── inet6.uts │ │ ├── ipsec.uts │ │ ├── isakmp.uts │ │ ├── kerberos.uts │ │ ├── l2.uts │ │ ├── l2tp.uts │ │ ├── ldap.uts │ │ ├── ldapopenldap.uts │ │ ├── llmnr.uts │ │ ├── lltd.uts │ │ ├── mgcp.uts │ │ ├── mobileip.uts │ │ ├── msnrtp.uts │ │ ├── msrpce/ │ │ │ ├── mgmt.uts │ │ │ ├── msdrsr.uts │ │ │ ├── mslsad.uts │ │ │ ├── msnrpc.uts │ │ │ ├── msscmr.uts │ │ │ └── mswmi.uts │ │ ├── netbios.uts │ │ ├── netflow.uts │ │ ├── ntlm.uts │ │ ├── ntp.uts │ │ ├── pflog.uts │ │ ├── ppp.uts │ │ ├── pptp.uts │ │ ├── quic.uts │ │ ├── radius.uts │ │ ├── rip.uts │ │ ├── rtp.uts │ │ ├── sctp.uts │ │ ├── skinny.uts │ │ ├── smb.uts │ │ ├── smb2.uts │ │ ├── smbclientserver.uts │ │ ├── snmp.uts │ │ ├── spnego.uts │ │ ├── ssh.uts │ │ ├── tftp.uts │ │ ├── tls/ │ │ │ ├── __init__.py │ │ │ ├── cert.uts │ │ │ ├── example_client.py │ │ │ ├── example_server.py │ │ │ ├── pki/ │ │ │ │ ├── README.md │ │ │ │ ├── ca_cert.pem │ │ │ │ ├── ca_key.pem │ │ │ │ ├── cli_cert.pem │ │ │ │ ├── cli_key.pem │ │ │ │ ├── srv_cert.pem │ │ │ │ ├── srv_cert_ed25519.pem │ │ │ │ ├── srv_key.pem │ │ │ │ └── srv_key_ed25519.pem │ │ │ ├── sslv2.uts │ │ │ ├── tls.uts │ │ │ ├── tls13.uts │ │ │ └── tlsclientserver.uts │ │ ├── usb.uts │ │ ├── vrrp.uts │ │ ├── vxlan.uts │ │ └── x509.uts │ ├── sendsniff.uts │ ├── testsocket.py │ ├── tools/ │ │ ├── isotpscanner.uts │ │ ├── obdscanner.uts │ │ └── xcpscanner.uts │ ├── tuntap.uts │ └── windows.uts └── tox.ini
Showing preview only (1,084K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (14578 symbols across 341 files)
FILE: doc/scapy/_ext/linkcode_res.py
function linkcode_resolve (line 43) | def linkcode_resolve(domain, info):
FILE: doc/scapy/_ext/scapy_doc.py
function generate_rest_table (line 18) | def generate_rest_table(items):
function tab (line 33) | def tab(items):
function class_ref (line 42) | def class_ref(cls):
function get_fields_desc (line 51) | def get_fields_desc(obj):
class AttrsDocumenter (line 91) | class AttrsDocumenter(AttributeDocumenter):
method add_directive_header (line 96) | def add_directive_header(self, *args, **kwargs):
function builder_inited_handler (line 140) | def builder_inited_handler(app):
function setup (line 146) | def setup(app):
FILE: scapy/__init__.py
function _parse_tag (line 26) | def _parse_tag(tag):
function _version_from_git_archive (line 48) | def _version_from_git_archive():
function _version_from_git_describe (line 82) | def _version_from_git_describe():
function _version (line 132) | def _version():
FILE: scapy/ansmachine.py
class ReferenceAM (line 41) | class ReferenceAM(type):
method __new__ (line 42) | def __new__(cls,
class AnsweringMachine (line 70) | class AnsweringMachine(Generic[_T], metaclass=ReferenceAM):
method __init__ (line 80) | def __init__(self, **kargs):
method __getattr__ (line 98) | def __getattr__(self, attr):
method __setattr__ (line 105) | def __setattr__(self, attr, val):
method parse_options (line 113) | def parse_options(self):
method parse_all_options (line 117) | def parse_all_options(self, mode, kargs):
method is_request (line 142) | def is_request(self, req):
method make_reply (line 147) | def make_reply(self, req):
method send_reply (line 151) | def send_reply(self, reply, send_function=None):
method print_reply (line 158) | def print_reply(self, req, reply):
method reply (line 166) | def reply(self, pkt, send_function=None, address=None):
method run (line 185) | def run(self, *args, **kargs):
method bg (line 193) | def bg(self, *args, **kwargs):
method __call__ (line 199) | def __call__(self, *args, **kargs):
method sniff (line 216) | def sniff(self):
method sniff_bg (line 220) | def sniff_bg(self):
class AnsweringMachineTCP (line 226) | class AnsweringMachineTCP(AnsweringMachine[Packet]):
method parse_options (line 233) | def parse_options(self, port=80, cls=conf.raw_layer):
method close (line 238) | def close(self):
method sniff (line 242) | def sniff(self):
method sniff_bg (line 277) | def sniff_bg(self):
method make_reply (line 282) | def make_reply(self, req, address=None):
class AnsweringMachineUDP (line 287) | class AnsweringMachineUDP(AnsweringMachineTCP):
FILE: scapy/arch/__init__.py
function str2mac (line 72) | def str2mac(s):
function get_if_addr (line 78) | def get_if_addr(iff):
function get_if_hwaddr (line 86) | def get_if_hwaddr(iff):
function get_if_addr6 (line 94) | def get_if_addr6(niff):
function get_if_raw_addr6 (line 109) | def get_if_raw_addr6(iff):
function get_if_raw_addr (line 154) | def get_if_raw_addr(iff: Union['NetworkInterface', str]) -> bytes:
function in6_getifaddr (line 157) | def in6_getifaddr() -> List[Tuple[str, int, str]]:
function read_nameservers (line 160) | def read_nameservers() -> List[str]:
function read_routes (line 163) | def read_routes() -> List[str]:
function read_routes6 (line 166) | def read_routes6() -> List[str]:
FILE: scapy/arch/bpf/consts.py
function _IOC (line 35) | def _IOC(inout, group, num, len):
FILE: scapy/arch/bpf/core.py
function get_dev_bpf (line 48) | def get_dev_bpf():
function attach_filter (line 71) | def attach_filter(fd, bpf_filter, iface):
function in6_getifaddr (line 83) | def in6_getifaddr():
class BPFInterfaceProvider (line 105) | class BPFInterfaceProvider(InterfaceProvider):
method _is_valid (line 108) | def _is_valid(self, dev):
method load (line 130) | def load(self):
FILE: scapy/arch/bpf/pfroute.py
class pfmsghdr (line 294) | class pfmsghdr(Packet):
method extract_padding (line 308) | def extract_padding(self, s: bytes) -> Tuple[bytes, Optional[bytes]]:
method extract_padding (line 315) | def extract_padding(self, s: bytes) -> Tuple[bytes, Optional[bytes]]:
class sockaddr (line 327) | class sockaddr(Packet):
method default_payload_class (line 420) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class SockAddrsField (line 424) | class SockAddrsField(FieldListField):
method __init__ (line 427) | def __init__(self, name):
class if_data (line 441) | class if_data(Packet):
method default_payload_class (line 474) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 504) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 542) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 579) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class if_data (line 479) | class if_data(Packet):
method default_payload_class (line 474) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 504) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 542) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 579) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class if_data (line 509) | class if_data(Packet):
method default_payload_class (line 474) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 504) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 542) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 579) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class if_data (line 548) | class if_data(Packet):
method default_payload_class (line 474) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 504) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 542) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 579) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class if_msghdr (line 585) | class if_msghdr(Packet):
class if_msghdr (line 612) | class if_msghdr(Packet):
class ifa_msghdr (line 643) | class ifa_msghdr(Packet):
class ifa_msghdr (line 651) | class ifa_msghdr(Packet):
class ifa_msghdr (line 678) | class ifa_msghdr(Packet):
class ifma_msghdr (line 692) | class ifma_msghdr(Packet):
class if_announcemsghdr (line 700) | class if_announcemsghdr(Packet):
class rt_metrics (line 713) | class rt_metrics(Packet):
method default_payload_class (line 729) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 748) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 769) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 793) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class rt_metrics (line 734) | class rt_metrics(Packet):
method default_payload_class (line 729) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 748) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 769) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 793) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class rt_metrics (line 753) | class rt_metrics(Packet):
method default_payload_class (line 729) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 748) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 769) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 793) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class rt_metrics (line 775) | class rt_metrics(Packet):
method default_payload_class (line 729) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 748) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 769) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
method default_payload_class (line 793) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class rt_msghdr (line 799) | class rt_msghdr(Packet):
class rt_msghdr (line 831) | class rt_msghdr(Packet):
class rt_msghdr (line 864) | class rt_msghdr(Packet):
class rt_msghdr (line 900) | class rt_msghdr(Packet):
class pfmsghdrs (line 932) | class pfmsghdrs(Packet):
function _sr1_bsdsysctl (line 958) | def _sr1_bsdsysctl(mib) -> List[Packet]:
function read_routes (line 991) | def read_routes():
function read_routes6 (line 1087) | def read_routes6():
function _get_if_list (line 1183) | def _get_if_list():
FILE: scapy/arch/bpf/supersocket.py
class bpf_timeval (line 69) | class bpf_timeval(ctypes.Structure):
class bpf_timeval (line 74) | class bpf_timeval(ctypes.Structure):
class bpf_timeval (line 78) | class bpf_timeval(ctypes.Structure): # type: ignore
class bpf_hdr (line 83) | class bpf_hdr(ctypes.Structure):
class _L2bpfSocket (line 96) | class _L2bpfSocket(SuperSocket):
method __init__ (line 103) | def __init__(self,
method set_promisc (line 233) | def set_promisc(self, value):
method __del__ (line 243) | def __del__(self):
method guess_cls (line 251) | def guess_cls(self):
method set_nonblock (line 273) | def set_nonblock(self, set_flag=True):
method get_stats (line 297) | def get_stats(self):
method get_blen (line 308) | def get_blen(self):
method fileno (line 319) | def fileno(self):
method close (line 324) | def close(self):
method send (line 334) | def send(self, x):
method recv_raw (line 342) | def recv_raw(self, x=BPF_BUFFER_LENGTH):
method select (line 350) | def select(sockets, remain=None):
class L2bpfListenSocket (line 359) | class L2bpfListenSocket(_L2bpfSocket):
method __init__ (line 362) | def __init__(self, *args, **kwargs):
method buffered_frames (line 367) | def buffered_frames(self):
method get_frame (line 372) | def get_frame(self):
method bpf_align (line 381) | def bpf_align(bh_h, bh_c):
method extract_frames (line 388) | def extract_frames(self, bpf_buffer):
method recv_raw (line 421) | def recv_raw(self, x=BPF_BUFFER_LENGTH):
class L2bpfSocket (line 444) | class L2bpfSocket(L2bpfListenSocket):
method send (line 447) | def send(self, x):
method nonblock_recv (line 452) | def nonblock_recv(self):
class L3bpfSocket (line 467) | class L3bpfSocket(L2bpfSocket):
method __init__ (line 469) | def __init__(self,
method recv (line 488) | def recv(self, x: int = BPF_BUFFER_LENGTH, **kwargs: Any) -> Optional[...
method send (line 496) | def send(self, pkt):
method select (line 561) | def select(sockets, remain=None):
function bpf_select (line 574) | def bpf_select(fds_list, timeout=None):
FILE: scapy/arch/common.py
function get_if_raw_addr (line 54) | def get_if_raw_addr(iff):
function compile_filter (line 66) | def compile_filter(filter_exp, # type: str
function free_filter (line 135) | def free_filter(bp: bpf_program) -> None:
function read_nameservers (line 147) | def read_nameservers() -> List[str]:
FILE: scapy/arch/libpcap.py
class _L2libpcapSocket (line 85) | class _L2libpcapSocket(SuperSocket):
method __init__ (line 88) | def __init__(self, fd):
method recv_raw (line 109) | def recv_raw(self, x=MTU):
method nonblock_recv (line 120) | def nonblock_recv(self, x=MTU):
method fileno (line 128) | def fileno(self):
method select (line 133) | def select(sockets, remain=None):
method close (line 137) | def close(self):
function load_winpcapy (line 194) | def load_winpcapy():
class _PcapWrapper_libpcap (line 285) | class _PcapWrapper_libpcap: # noqa: F811
method __init__ (line 288) | def __init__(self,
method next (line 389) | def next(self):
method datalink (line 415) | def datalink(self):
method fileno (line 422) | def fileno(self):
method setfilter (line 433) | def setfilter(self, f):
method setnonblock (line 445) | def setnonblock(self, i):
method send (line 449) | def send(self, x):
method close (line 453) | def close(self):
class LibpcapProvider (line 458) | class LibpcapProvider(InterfaceProvider):
method load (line 465) | def load(self):
method reload (line 497) | def reload(self):
class L2pcapListenSocket (line 509) | class L2pcapListenSocket(_L2libpcapSocket):
method __init__ (line 512) | def __init__(self,
method send (line 556) | def send(self, x):
class L2pcapSocket (line 562) | class L2pcapSocket(_L2libpcapSocket):
method __init__ (line 565) | def __init__(self,
method send (line 622) | def send(self, x):
class L3pcapSocket (line 631) | class L3pcapSocket(L2pcapSocket):
method __init__ (line 634) | def __init__(self, *args, **kwargs):
method recv (line 639) | def recv(self, x=MTU, **kwargs):
method send (line 647) | def send(self, x):
method select (line 681) | def select(sockets, remain=None):
method close (line 691) | def close(self):
FILE: scapy/arch/linux/__init__.py
function attach_filter (line 120) | def attach_filter(sock, bpf_filter, iface):
function set_promisc (line 143) | def set_promisc(s, iff, val=1):
class LinuxInterfaceProvider (line 157) | class LinuxInterfaceProvider(InterfaceProvider):
method _is_valid (line 160) | def _is_valid(self, dev):
method load (line 164) | def load(self):
function get_last_packet_timestamp (line 181) | def get_last_packet_timestamp(sock):
function get_last_packet_timestamp (line 187) | def get_last_packet_timestamp(sock):
function _flush_fd (line 194) | def _flush_fd(fd):
class L2Socket (line 204) | class L2Socket(SuperSocket):
method __init__ (line 207) | def __init__(self,
method close (line 273) | def close(self):
method recv_raw (line 284) | def recv_raw(self, x=MTU):
method send (line 294) | def send(self, x):
class L2ListenSocket (line 308) | class L2ListenSocket(L2Socket):
method send (line 311) | def send(self, x):
class L3PacketSocket (line 316) | class L3PacketSocket(L2Socket):
method __init__ (line 319) | def __init__(self,
method recv (line 339) | def recv(self, x=MTU, **kwargs):
method send (line 347) | def send(self, x):
method select (line 393) | def select(sockets, remain=None):
method close (line 403) | def close(self):
class VEthPair (line 413) | class VEthPair(object):
method __init__ (line 418) | def __init__(self, iface_name, peer_name):
method iface (line 428) | def iface(self):
method peer (line 432) | def peer(self):
method setup (line 436) | def setup(self):
method destroy (line 444) | def destroy(self):
method up (line 452) | def up(self):
method down (line 461) | def down(self):
method __enter__ (line 470) | def __enter__(self):
method __exit__ (line 477) | def __exit__(self, exc_type, exc_val, exc_tb):
FILE: scapy/arch/linux/rtnetlink.py
class rtmsghdr (line 63) | class rtmsghdr(Packet):
method post_build (line 109) | def post_build(self, pkt: bytes, pay: bytes) -> bytes:
method extract_padding (line 115) | def extract_padding(self, s: bytes) -> Tuple[bytes, Optional[bytes]]:
method answers (line 118) | def answers(self, other: Packet) -> bool:
class nlmsgerr_rtattr (line 125) | class nlmsgerr_rtattr(Packet):
method default_payload_class (line 149) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class nlmsgerr (line 153) | class nlmsgerr(Packet):
class ifla_af_spec_inet_rtattr (line 167) | class ifla_af_spec_inet_rtattr(Packet):
method default_payload_class (line 194) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class ifla_af_spec_inet6_rtattr (line 198) | class ifla_af_spec_inet6_rtattr(Packet):
method default_payload_class (line 233) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class ifla_af_spec_rtattr (line 237) | class ifla_af_spec_rtattr(Packet):
method default_payload_class (line 277) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class ifinfomsg_rtattr (line 281) | class ifinfomsg_rtattr(Packet):
method default_payload_class (line 391) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class ifinfomsg (line 395) | class ifinfomsg(Packet):
class ifaddrmsg_rtattr (line 422) | class ifaddrmsg_rtattr(Packet):
method default_payload_class (line 480) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class ifaddrmsg (line 484) | class ifaddrmsg(Packet):
class rtmsg_rtattr (line 527) | class rtmsg_rtattr(Packet):
method default_payload_class (line 604) | def default_payload_class(self, payload: bytes) -> Type[Packet]:
class rtmsg (line 608) | class rtmsg(Packet):
class rtmsghdrs (line 685) | class rtmsghdrs(Packet):
function _sr1_rtrequest (line 705) | def _sr1_rtrequest(pkt: Packet) -> List[Packet]:
function _get_ips (line 756) | def _get_ips(af_family=socket.AF_UNSPEC):
function _get_if_list (line 798) | def _get_if_list():
function in6_getifaddr (line 841) | def in6_getifaddr():
function _read_routes (line 861) | def _read_routes(af_family):
function read_routes (line 886) | def read_routes():
function read_routes6 (line 938) | def read_routes6():
FILE: scapy/arch/solaris.py
function get_working_if (line 28) | def get_working_if():
FILE: scapy/arch/unix.py
function get_if (line 34) | def get_if(iff, cmd):
function get_if_raw_hwaddr (line 45) | def get_if_raw_hwaddr(iff, # type: str
function _guess_iface_name (line 74) | def _guess_iface_name(netif):
function read_routes (line 91) | def read_routes():
function _in6_getifaddr (line 206) | def _in6_getifaddr(ifname):
function in6_getifaddr (line 243) | def in6_getifaddr():
function read_routes6 (line 290) | def read_routes6():
FILE: scapy/arch/windows/__init__.py
function _encapsulate_admin (line 107) | def _encapsulate_admin(cmd):
function _get_npcap_config (line 119) | def _get_npcap_config(param_key):
function _where (line 140) | def _where(filename, dirs=None, env="PATH"):
function win_find_exe (line 159) | def win_find_exe(filename, installsubdir=None, env="ProgramFiles"):
class WinProgPath (line 178) | class WinProgPath(ProgPath):
method __init__ (line 179) | def __init__(self):
method _reload (line 183) | def _reload(self):
function _exec_cmd (line 210) | def _exec_cmd(command):
function test_windump_npcap (line 223) | def test_windump_npcap():
function get_windows_if_list (line 243) | def get_windows_if_list(extended=False):
function _pcapname_to_guid (line 308) | def _pcapname_to_guid(pcap_name):
class NetworkInterface_Win (line 318) | class NetworkInterface_Win(NetworkInterface):
method __init__ (line 321) | def __init__(self, provider, data=None):
method update (line 331) | def update(self, data):
method _check_npcap_requirement (line 356) | def _check_npcap_requirement(self):
method _npcap_set (line 366) | def _npcap_set(self, key, val):
method _npcap_get (line 379) | def _npcap_get(self, key):
method mode (line 389) | def mode(self):
method ismonitor (line 396) | def ismonitor(self):
method setmonitor (line 409) | def setmonitor(self, enable=True):
method availablemodes (line 424) | def availablemodes(self):
method setmode (line 432) | def setmode(self, mode):
method channel (line 459) | def channel(self):
method setchannel (line 467) | def setchannel(self, channel):
method frequency (line 475) | def frequency(self):
method setfrequency (line 483) | def setfrequency(self, freq):
method availablemodulations (line 491) | def availablemodulations(self):
method modulation (line 499) | def modulation(self):
method setmodulation (line 507) | def setmodulation(self, modu):
class WindowsInterfacesProvider (line 542) | class WindowsInterfacesProvider(InterfaceProvider):
method _is_valid (line 546) | def _is_valid(self, dev):
method _pcap_check (line 554) | def _pcap_check(cls):
method load (line 599) | def load(self, NetworkInterface_Win=NetworkInterface_Win):
method reload (line 669) | def reload(self):
method _l3socket (line 679) | def _l3socket(self, dev, ipv6):
function get_ips (line 692) | def get_ips(v6=False):
function get_ip_from_name (line 708) | def get_ip_from_name(ifname, v6=False):
function pcap_service_name (line 722) | def pcap_service_name():
function pcap_service_status (line 728) | def pcap_service_status():
function _pcap_service_control (line 735) | def _pcap_service_control(action, askadmin=True):
function pcap_service_start (line 745) | def pcap_service_start(askadmin=True):
function pcap_service_stop (line 751) | def pcap_service_stop(askadmin=True):
function open_pcap (line 760) | def open_pcap(device, # type: Union[str, NetworkInterface]
function _read_routes_c_v1 (line 788) | def _read_routes_c_v1():
function _read_routes_c (line 825) | def _read_routes_c(ipv6): # noqa: F811
function _read_routes_c (line 831) | def _read_routes_c(ipv6=False): # noqa: F811
function _read_routes_c (line 836) | def _read_routes_c(ipv6=False): # noqa: F811
function read_routes (line 883) | def read_routes():
function in6_getifaddr (line 901) | def in6_getifaddr():
function _append_route6 (line 918) | def _append_route6(routes, # type: List[Tuple[str, int, str, str, List[...
function read_routes6 (line 941) | def read_routes6():
function _route_add_loopback (line 953) | def _route_add_loopback(routes=None, # type: Optional[List[Any]]
class _NotAvailableSocket (line 1022) | class _NotAvailableSocket(SuperSocket):
method __init__ (line 1025) | def __init__(self, *args, **kargs):
function read_nameservers (line 1038) | def read_nameservers() -> List[str]:
FILE: scapy/arch/windows/native.py
class L3WinSocket (line 46) | class L3WinSocket(SuperSocket):
method __init__ (line 70) | def __init__(self,
method send (line 157) | def send(self, x):
method nonblock_recv (line 174) | def nonblock_recv(self, x=MTU):
method recv_raw (line 190) | def recv_raw(self, x=MTU):
method close (line 223) | def close(self):
method select (line 230) | def select(sockets, remain=None):
class L3WinSocket6 (line 235) | class L3WinSocket6(L3WinSocket):
method __init__ (line 238) | def __init__(self, **kwargs):
FILE: scapy/arch/windows/structures.py
function _resolve_list (line 66) | def _resolve_list(list_obj):
function _struct_to_dict (line 76) | def _struct_to_dict(struct_obj):
function _windows_title (line 104) | def _windows_title(title=None):
class SERVICE_STATUS (line 116) | class SERVICE_STATUS(Structure):
function get_service_status (line 143) | def get_service_status(service):
class in_addr (line 180) | class in_addr(Structure):
class in6_addr (line 184) | class in6_addr(Structure):
class sockaddr_in (line 188) | class sockaddr_in(Structure):
class sockaddr_in6 (line 195) | class sockaddr_in6(Structure):
class SOCKADDR_INET (line 203) | class SOCKADDR_INET(ctypes.Union):
class SOCKET_ADDRESS (line 239) | class SOCKET_ADDRESS(ctypes.Structure):
class _IP_ADAPTER_ADDRESSES_METRIC (line 244) | class _IP_ADAPTER_ADDRESSES_METRIC(Structure):
class IP_ADAPTER_UNICAST_ADDRESS (line 249) | class IP_ADAPTER_UNICAST_ADDRESS(Structure):
class IP_ADAPTER_ANYCAST_ADDRESS (line 283) | class IP_ADAPTER_ANYCAST_ADDRESS(Structure):
class IP_ADAPTER_MULTICAST_ADDRESS (line 296) | class IP_ADAPTER_MULTICAST_ADDRESS(Structure):
class IP_ADAPTER_DNS_SERVER_ADDRESS (line 309) | class IP_ADAPTER_DNS_SERVER_ADDRESS(Structure):
class IP_ADAPTER_PREFIX (line 322) | class IP_ADAPTER_PREFIX(Structure):
class IP_ADAPTER_ADDRESSES (line 335) | class IP_ADAPTER_ADDRESSES(Structure):
function GetAdaptersAddresses (line 413) | def GetAdaptersAddresses(AF=AddressFamily.AF_UNSPEC):
class MIB_IPFORWARDROW (line 445) | class MIB_IPFORWARDROW(Structure):
class MIB_IPFORWARDTABLE (line 462) | class MIB_IPFORWARDTABLE(Structure):
function GetIpForwardTable (line 476) | def GetIpForwardTable():
class NET_LUID (line 506) | class NET_LUID(Structure):
class IP_ADDRESS_PREFIX (line 510) | class IP_ADDRESS_PREFIX(Structure):
class MIB_IPFORWARD_ROW2 (line 515) | class MIB_IPFORWARD_ROW2(Structure):
class MIB_IPFORWARD_TABLE2 (line 533) | class MIB_IPFORWARD_TABLE2(Structure):
function GetIpForwardTable2 (line 554) | def GetIpForwardTable2(AF=AddressFamily.AF_UNSPEC):
class _SECURITY_ATTRIBUTES (line 574) | class _SECURITY_ATTRIBUTES(Structure):
function _get_win_fifo (line 583) | def _get_win_fifo() -> Tuple[str, Any]:
function _win_fifo_open (line 604) | def _win_fifo_open(fd: Any) -> IO[bytes]:
FILE: scapy/as_resolvers.py
class AS_resolver (line 23) | class AS_resolver:
method __init__ (line 27) | def __init__(self, server=None, port=43, options=None):
method _start (line 35) | def _start(self):
method _stop (line 43) | def _stop(self):
method _parse_whois (line 47) | def _parse_whois(self, txt):
method _resolve_one (line 61) | def _resolve_one(self, ip):
method resolve (line 73) | def resolve(self,
class AS_resolver_riswhois (line 87) | class AS_resolver_riswhois(AS_resolver):
class AS_resolver_radb (line 92) | class AS_resolver_radb(AS_resolver):
class AS_resolver_cymru (line 97) | class AS_resolver_cymru(AS_resolver):
method resolve (line 101) | def resolve(self,
method parse (line 122) | def parse(self, data):
class AS_resolver_multi (line 138) | class AS_resolver_multi(AS_resolver):
method __init__ (line 139) | def __init__(self, *reslist):
method resolve (line 148) | def resolve(self, *ips):
FILE: scapy/asn1/asn1.py
class UTC (line 44) | class UTC(tzinfo):
method utcoffset (line 47) | def utcoffset(self, dt): # type: ignore
method tzname (line 50) | def tzname(self, dt): # type: ignore
method dst (line 53) | def dst(self, dt): # type: ignore
class timezone (line 56) | class timezone(tzinfo): # type: ignore
method __init__ (line 57) | def __init__(self, delta): # type: ignore
method utcoffset (line 60) | def utcoffset(self, dt): # type: ignore
method tzname (line 63) | def tzname(self, dt): # type: ignore
method dst (line 66) | def dst(self, dt): # type: ignore
class RandASN1Object (line 72) | class RandASN1Object(RandField["ASN1_Object[Any]"]):
method __init__ (line 73) | def __init__(self, objlist=None):
method _fix (line 85) | def _fix(self, n=0):
class ASN1_Error (line 108) | class ASN1_Error(Scapy_Exception):
class ASN1_Encoding_Error (line 112) | class ASN1_Encoding_Error(ASN1_Error):
class ASN1_Decoding_Error (line 116) | class ASN1_Decoding_Error(ASN1_Error):
class ASN1_BadTag_Decoding_Error (line 120) | class ASN1_BadTag_Decoding_Error(ASN1_Decoding_Error):
class ASN1Codec (line 124) | class ASN1Codec(EnumElement):
method register_stem (line 125) | def register_stem(cls, stem):
method dec (line 129) | def dec(cls, s, context=None):
method safedec (line 133) | def safedec(cls, s, context=None):
method get_stem (line 137) | def get_stem(cls):
class ASN1_Codecs_metaclass (line 142) | class ASN1_Codecs_metaclass(Enum_metaclass):
class ASN1_Codecs (line 146) | class ASN1_Codecs(metaclass=ASN1_Codecs_metaclass):
class ASN1Tag (line 158) | class ASN1Tag(EnumElement):
method __init__ (line 159) | def __init__(self,
method clone (line 173) | def clone(self): # not a real deep copy. self.codec is shared
method register_asn1_object (line 177) | def register_asn1_object(self, asn1obj):
method asn1_object (line 181) | def asn1_object(self, val):
method register (line 187) | def register(self, codecnum, codec):
method get_codec (line 191) | def get_codec(self, codec):
class ASN1_Class_metaclass (line 200) | class ASN1_Class_metaclass(Enum_metaclass):
method __new__ (line 204) | def __new__(cls,
class ASN1_Class (line 234) | class ASN1_Class(metaclass=ASN1_Class_metaclass):
class ASN1_Class_UNIVERSAL (line 238) | class ASN1_Class_UNIVERSAL(ASN1_Class):
class ASN1_Object_metaclass (line 281) | class ASN1_Object_metaclass(type):
method __new__ (line 282) | def __new__(cls,
class ASN1_Object (line 302) | class ASN1_Object(Generic[_K], metaclass=ASN1_Object_metaclass):
method __init__ (line 305) | def __init__(self, val):
method enc (line 309) | def enc(self, codec):
method __repr__ (line 313) | def __repr__(self):
method __str__ (line 317) | def __str__(self):
method __bytes__ (line 321) | def __bytes__(self):
method strshow (line 325) | def strshow(self, lvl=0):
method show (line 329) | def show(self, lvl=0):
method __eq__ (line 333) | def __eq__(self, other):
method __lt__ (line 337) | def __lt__(self, other):
method __le__ (line 341) | def __le__(self, other):
method __gt__ (line 345) | def __gt__(self, other):
method __ge__ (line 349) | def __ge__(self, other):
method __ne__ (line 353) | def __ne__(self, other):
method command (line 357) | def command(self, json=False):
class _ASN1_ERROR (line 375) | class _ASN1_ERROR(ASN1_Object[Union[bytes, ASN1_Object[Any]]]):
class ASN1_DECODING_ERROR (line 379) | class ASN1_DECODING_ERROR(_ASN1_ERROR):
method __init__ (line 382) | def __init__(self, val, exc=None):
method __repr__ (line 387) | def __repr__(self):
method enc (line 395) | def enc(self, codec):
class ASN1_force (line 402) | class ASN1_force(_ASN1_ERROR):
method enc (line 405) | def enc(self, codec):
class ASN1_BADTAG (line 412) | class ASN1_BADTAG(ASN1_force):
class ASN1_INTEGER (line 416) | class ASN1_INTEGER(ASN1_Object[int]):
method __repr__ (line 419) | def __repr__(self):
class ASN1_BOOLEAN (line 433) | class ASN1_BOOLEAN(ASN1_INTEGER):
method __repr__ (line 437) | def __repr__(self):
class ASN1_BIT_STRING (line 442) | class ASN1_BIT_STRING(ASN1_Object[str]):
method __init__ (line 450) | def __init__(self, val, readable=False):
method __setattr__ (line 457) | def __setattr__(self, name, value):
method set (line 495) | def set(self, i, val):
method __repr__ (line 506) | def __repr__(self):
class ASN1_STRING (line 523) | class ASN1_STRING(ASN1_Object[bytes]):
class ASN1_NULL (line 527) | class ASN1_NULL(ASN1_Object[None]):
method __repr__ (line 530) | def __repr__(self):
class ASN1_OID (line 535) | class ASN1_OID(ASN1_Object[str]):
method __init__ (line 538) | def __init__(self, val):
method __repr__ (line 545) | def __repr__(self):
class ASN1_ENUMERATED (line 550) | class ASN1_ENUMERATED(ASN1_INTEGER):
class ASN1_UTF8_STRING (line 554) | class ASN1_UTF8_STRING(ASN1_STRING):
class ASN1_NUMERIC_STRING (line 558) | class ASN1_NUMERIC_STRING(ASN1_Object[str]):
class ASN1_PRINTABLE_STRING (line 562) | class ASN1_PRINTABLE_STRING(ASN1_Object[str]):
class ASN1_T61_STRING (line 566) | class ASN1_T61_STRING(ASN1_STRING):
class ASN1_VIDEOTEX_STRING (line 570) | class ASN1_VIDEOTEX_STRING(ASN1_STRING):
class ASN1_IA5_STRING (line 574) | class ASN1_IA5_STRING(ASN1_STRING):
class ASN1_GENERAL_STRING (line 578) | class ASN1_GENERAL_STRING(ASN1_STRING):
class ASN1_GENERALIZED_TIME (line 582) | class ASN1_GENERALIZED_TIME(ASN1_Object[str]):
method __init__ (line 602) | def __init__(self, val):
method __setattr__ (line 609) | def __setattr__(self, name, value):
method __repr__ (line 690) | def __repr__(self):
class ASN1_UTC_TIME (line 698) | class ASN1_UTC_TIME(ASN1_GENERALIZED_TIME):
class ASN1_ISO646_STRING (line 702) | class ASN1_ISO646_STRING(ASN1_STRING):
class ASN1_UNIVERSAL_STRING (line 706) | class ASN1_UNIVERSAL_STRING(ASN1_STRING):
class ASN1_BMP_STRING (line 710) | class ASN1_BMP_STRING(ASN1_STRING):
method __setattr__ (line 713) | def __setattr__(self, name, value):
method __repr__ (line 722) | def __repr__(self):
class ASN1_SEQUENCE (line 730) | class ASN1_SEQUENCE(ASN1_Object[List[Any]]):
method strshow (line 733) | def strshow(self, lvl=0):
class ASN1_SET (line 741) | class ASN1_SET(ASN1_SEQUENCE):
class ASN1_IPADDRESS (line 745) | class ASN1_IPADDRESS(ASN1_Object[str]):
class ASN1_COUNTER32 (line 749) | class ASN1_COUNTER32(ASN1_INTEGER):
class ASN1_COUNTER64 (line 753) | class ASN1_COUNTER64(ASN1_INTEGER):
class ASN1_GAUGE32 (line 757) | class ASN1_GAUGE32(ASN1_INTEGER):
class ASN1_TIME_TICKS (line 761) | class ASN1_TIME_TICKS(ASN1_INTEGER):
FILE: scapy/asn1/ber.py
class BER_Exception (line 54) | class BER_Exception(Exception):
class BER_Encoding_Error (line 58) | class BER_Encoding_Error(ASN1_Encoding_Error):
method __init__ (line 59) | def __init__(self,
method __str__ (line 69) | def __str__(self):
class BER_Decoding_Error (line 80) | class BER_Decoding_Error(ASN1_Decoding_Error):
method __init__ (line 81) | def __init__(self,
method __str__ (line 91) | def __str__(self):
class BER_BadTag_Decoding_Error (line 102) | class BER_BadTag_Decoding_Error(BER_Decoding_Error,
function BER_len_enc (line 107) | def BER_len_enc(ll, size=0):
function BER_len_dec (line 127) | def BER_len_dec(s):
function BER_num_enc (line 146) | def BER_num_enc(ll, size=1):
function BER_num_dec (line 158) | def BER_num_dec(s, cls_id=0):
function BER_id_dec (line 175) | def BER_id_dec(s):
function BER_id_enc (line 202) | def BER_id_enc(n):
function BER_tagging_dec (line 219) | def BER_tagging_dec(s, # type: bytes
function BER_tagging_enc (line 258) | def BER_tagging_enc(s, implicit_tag=None, explicit_tag=None):
class BERcodec_metaclass (line 270) | class BERcodec_metaclass(type):
method __new__ (line 271) | def __new__(cls,
class BERcodec_Object (line 289) | class BERcodec_Object(Generic[_K], metaclass=BERcodec_metaclass):
method asn1_object (line 294) | def asn1_object(cls, val):
method check_string (line 299) | def check_string(cls, s):
method check_type (line 308) | def check_type(cls, s):
method check_type_get_len (line 320) | def check_type_get_len(cls, s):
method check_type_check_len (line 329) | def check_type_check_len(cls, s):
method do_dec (line 338) | def do_dec(cls,
method dec (line 366) | def dec(cls,
method safedec (line 387) | def safedec(cls,
method enc (line 395) | def enc(cls, s, size_len=0):
class BERcodec_INTEGER (line 413) | class BERcodec_INTEGER(BERcodec_Object[int]):
method enc (line 417) | def enc(cls, i, size_len=0):
method do_dec (line 436) | def do_dec(cls,
class BERcodec_BOOLEAN (line 453) | class BERcodec_BOOLEAN(BERcodec_INTEGER):
class BERcodec_BIT_STRING (line 457) | class BERcodec_BIT_STRING(BERcodec_Object[str]):
method do_dec (line 461) | def do_dec(cls,
method enc (line 488) | def enc(cls, _s, size_len=0):
class BERcodec_STRING (line 503) | class BERcodec_STRING(BERcodec_Object[str]):
method enc (line 507) | def enc(cls, _s, size_len=0):
method do_dec (line 514) | def do_dec(cls,
class BERcodec_NULL (line 524) | class BERcodec_NULL(BERcodec_INTEGER):
method enc (line 528) | def enc(cls, i, size_len=0):
class BERcodec_OID (line 536) | class BERcodec_OID(BERcodec_Object[bytes]):
method enc (line 540) | def enc(cls, _oid, size_len=0):
method do_dec (line 554) | def do_dec(cls,
class BERcodec_ENUMERATED (line 574) | class BERcodec_ENUMERATED(BERcodec_INTEGER):
class BERcodec_UTF8_STRING (line 578) | class BERcodec_UTF8_STRING(BERcodec_STRING):
class BERcodec_NUMERIC_STRING (line 582) | class BERcodec_NUMERIC_STRING(BERcodec_STRING):
class BERcodec_PRINTABLE_STRING (line 586) | class BERcodec_PRINTABLE_STRING(BERcodec_STRING):
class BERcodec_T61_STRING (line 590) | class BERcodec_T61_STRING(BERcodec_STRING):
class BERcodec_VIDEOTEX_STRING (line 594) | class BERcodec_VIDEOTEX_STRING(BERcodec_STRING):
class BERcodec_IA5_STRING (line 598) | class BERcodec_IA5_STRING(BERcodec_STRING):
class BERcodec_GENERAL_STRING (line 602) | class BERcodec_GENERAL_STRING(BERcodec_STRING):
class BERcodec_UTC_TIME (line 606) | class BERcodec_UTC_TIME(BERcodec_STRING):
class BERcodec_GENERALIZED_TIME (line 610) | class BERcodec_GENERALIZED_TIME(BERcodec_STRING):
class BERcodec_ISO646_STRING (line 614) | class BERcodec_ISO646_STRING(BERcodec_STRING):
class BERcodec_UNIVERSAL_STRING (line 618) | class BERcodec_UNIVERSAL_STRING(BERcodec_STRING):
class BERcodec_BMP_STRING (line 622) | class BERcodec_BMP_STRING(BERcodec_STRING):
class BERcodec_SEQUENCE (line 626) | class BERcodec_SEQUENCE(BERcodec_Object[Union[bytes, List[BERcodec_Objec...
method enc (line 630) | def enc(cls, _ll, size_len=0):
method do_dec (line 639) | def do_dec(cls,
class BERcodec_SET (line 669) | class BERcodec_SET(BERcodec_SEQUENCE):
class BERcodec_IPADDRESS (line 673) | class BERcodec_IPADDRESS(BERcodec_STRING):
method enc (line 677) | def enc(cls, ipaddr_ascii, size_len=0): # type: ignore
method do_dec (line 686) | def do_dec(cls, s, context=None, safe=False):
class BERcodec_COUNTER32 (line 697) | class BERcodec_COUNTER32(BERcodec_INTEGER):
class BERcodec_COUNTER64 (line 701) | class BERcodec_COUNTER64(BERcodec_INTEGER):
class BERcodec_GAUGE32 (line 705) | class BERcodec_GAUGE32(BERcodec_INTEGER):
class BERcodec_TIME_TICKS (line 709) | class BERcodec_TIME_TICKS(BERcodec_INTEGER):
FILE: scapy/asn1/mib.py
class MIBDict (line 38) | class MIBDict(DADict[str, str]):
method _findroot (line 39) | def _findroot(self, x):
method _oidname (line 57) | def _oidname(self, x):
method _oid (line 63) | def _oid(self, x):
method _make_graph (line 75) | def _make_graph(self, other_keys=None, **kargs):
function _mib_register (line 98) | def _mib_register(ident, # type: str
function load_mib (line 156) | def load_mib(filenames):
FILE: scapy/asn1fields.py
class ASN1F_badsequence (line 66) | class ASN1F_badsequence(Exception):
class ASN1F_element (line 70) | class ASN1F_element(object):
class ASN1F_field (line 82) | class ASN1F_field(ASN1F_element, Generic[_I, _A]):
method __init__ (line 88) | def __init__(self,
method register_owner (line 118) | def register_owner(self, cls):
method i2repr (line 122) | def i2repr(self, pkt, x):
method i2h (line 126) | def i2h(self, pkt, x):
method m2i (line 130) | def m2i(self, pkt, s):
method i2m (line 161) | def i2m(self, pkt, x):
method any2i (line 179) | def any2i(self, pkt, x):
method extract_packet (line 183) | def extract_packet(self,
method build (line 201) | def build(self, pkt):
method dissect (line 205) | def dissect(self, pkt, s):
method do_copy (line 211) | def do_copy(self, x):
method set_val (line 223) | def set_val(self, pkt, val):
method is_empty (line 227) | def is_empty(self, pkt):
method get_fields_list (line 231) | def get_fields_list(self):
method __str__ (line 235) | def __str__(self):
method randval (line 239) | def randval(self):
method copy (line 243) | def copy(self):
class ASN1F_BOOLEAN (line 252) | class ASN1F_BOOLEAN(ASN1F_field[bool, ASN1_BOOLEAN]):
method randval (line 255) | def randval(self):
class ASN1F_INTEGER (line 260) | class ASN1F_INTEGER(ASN1F_field[int, ASN1_INTEGER]):
method randval (line 263) | def randval(self):
class ASN1F_enum_INTEGER (line 268) | class ASN1F_enum_INTEGER(ASN1F_INTEGER):
method __init__ (line 269) | def __init__(self,
method i2m (line 295) | def i2m(self,
method i2repr (line 306) | def i2repr(self,
class ASN1F_BIT_STRING (line 318) | class ASN1F_BIT_STRING(ASN1F_field[str, ASN1_BIT_STRING]):
method __init__ (line 321) | def __init__(self,
method randval (line 341) | def randval(self):
class ASN1F_STRING (line 346) | class ASN1F_STRING(ASN1F_field[str, ASN1_STRING]):
method randval (line 349) | def randval(self):
class ASN1F_NULL (line 354) | class ASN1F_NULL(ASN1F_INTEGER):
class ASN1F_OID (line 358) | class ASN1F_OID(ASN1F_field[str, ASN1_OID]):
method randval (line 361) | def randval(self):
class ASN1F_ENUMERATED (line 366) | class ASN1F_ENUMERATED(ASN1F_enum_INTEGER):
class ASN1F_UTF8_STRING (line 370) | class ASN1F_UTF8_STRING(ASN1F_STRING):
class ASN1F_NUMERIC_STRING (line 374) | class ASN1F_NUMERIC_STRING(ASN1F_STRING):
class ASN1F_PRINTABLE_STRING (line 378) | class ASN1F_PRINTABLE_STRING(ASN1F_STRING):
class ASN1F_T61_STRING (line 382) | class ASN1F_T61_STRING(ASN1F_STRING):
class ASN1F_VIDEOTEX_STRING (line 386) | class ASN1F_VIDEOTEX_STRING(ASN1F_STRING):
class ASN1F_IA5_STRING (line 390) | class ASN1F_IA5_STRING(ASN1F_STRING):
class ASN1F_GENERAL_STRING (line 394) | class ASN1F_GENERAL_STRING(ASN1F_STRING):
class ASN1F_UTC_TIME (line 398) | class ASN1F_UTC_TIME(ASN1F_STRING):
method randval (line 401) | def randval(self): # type: ignore
class ASN1F_GENERALIZED_TIME (line 406) | class ASN1F_GENERALIZED_TIME(ASN1F_STRING):
method randval (line 409) | def randval(self): # type: ignore
class ASN1F_ISO646_STRING (line 414) | class ASN1F_ISO646_STRING(ASN1F_STRING):
class ASN1F_UNIVERSAL_STRING (line 418) | class ASN1F_UNIVERSAL_STRING(ASN1F_STRING):
class ASN1F_BMP_STRING (line 422) | class ASN1F_BMP_STRING(ASN1F_STRING):
class ASN1F_SEQUENCE (line 426) | class ASN1F_SEQUENCE(ASN1F_field[List[Any], List[Any]]):
method __init__ (line 441) | def __init__(self, *seq, **kwargs):
method __repr__ (line 451) | def __repr__(self):
method is_empty (line 455) | def is_empty(self, pkt):
method get_fields_list (line 459) | def get_fields_list(self):
method m2i (line 464) | def m2i(self, pkt, s):
method dissect (line 499) | def dissect(self, pkt, s):
method build (line 504) | def build(self, pkt):
class ASN1F_SET (line 511) | class ASN1F_SET(ASN1F_SEQUENCE):
class ASN1F_SEQUENCE_OF (line 523) | class ASN1F_SEQUENCE_OF(ASN1F_field[List[_SEQ_T],
method __init__ (line 531) | def __init__(self,
method is_empty (line 561) | def is_empty(self,
method m2i (line 567) | def m2i(self,
method build (line 592) | def build(self, pkt):
method i2repr (line 604) | def i2repr(self, pkt, x):
method randval (line 615) | def randval(self):
method __repr__ (line 622) | def __repr__(self):
class ASN1F_SET_OF (line 627) | class ASN1F_SET_OF(ASN1F_SEQUENCE_OF):
class ASN1F_IPADDRESS (line 631) | class ASN1F_IPADDRESS(ASN1F_STRING):
class ASN1F_TIME_TICKS (line 635) | class ASN1F_TIME_TICKS(ASN1F_INTEGER):
class ASN1F_optional (line 643) | class ASN1F_optional(ASN1F_element):
method __init__ (line 647) | def __init__(self, field):
method __getattr__ (line 652) | def __getattr__(self, attr):
method m2i (line 656) | def m2i(self, pkt, s):
method dissect (line 664) | def dissect(self, pkt, s):
method build (line 672) | def build(self, pkt):
method any2i (line 678) | def any2i(self, pkt, x):
method i2repr (line 682) | def i2repr(self, pkt, x):
class ASN1F_omit (line 687) | class ASN1F_omit(ASN1F_field[None, None]):
method m2i (line 692) | def m2i(self, pkt, s):
method i2m (line 696) | def i2m(self, pkt, x):
class ASN1F_CHOICE (line 704) | class ASN1F_CHOICE(ASN1F_field[_CHOICE_T, ASN1_Object[Any]]):
method __init__ (line 713) | def __init__(self, name, default, *args, **kwargs):
method m2i (line 751) | def m2i(self, pkt, s):
method i2m (line 783) | def i2m(self, pkt, x):
method randval (line 796) | def randval(self):
class ASN1F_PACKET (line 813) | class ASN1F_PACKET(ASN1F_field['ASN1_Packet', Optional['ASN1_Packet']]):
method __init__ (line 816) | def __init__(self,
method m2i (line 837) | def m2i(self, pkt, s):
method i2m (line 860) | def i2m(self,
method any2i (line 883) | def any2i(self,
method randval (line 892) | def randval(self): # type: ignore
class ASN1F_BIT_STRING_ENCAPS (line 897) | class ASN1F_BIT_STRING_ENCAPS(ASN1F_BIT_STRING):
method __init__ (line 904) | def __init__(self,
method m2i (line 922) | def m2i(self, pkt, s): # type: ignore
method i2m (line 936) | def i2m(self, pkt, x): # type: ignore
class ASN1F_FLAGS (line 946) | class ASN1F_FLAGS(ASN1F_BIT_STRING):
method __init__ (line 947) | def __init__(self,
method any2i (line 965) | def any2i(self, pkt, x):
method get_flags (line 977) | def get_flags(self, pkt):
method i2repr (line 983) | def i2repr(self, pkt, x):
class ASN1F_STRING_PacketField (line 991) | class ASN1F_STRING_PacketField(ASN1F_STRING):
method i2m (line 997) | def i2m(self, pkt, val):
method any2i (line 1003) | def any2i(self, pkt, x):
class ASN1F_STRING_ENCAPS (line 1010) | class ASN1F_STRING_ENCAPS(ASN1F_STRING_PacketField):
method __init__ (line 1015) | def __init__(self,
method m2i (line 1033) | def m2i(self, pkt, s): # type: ignore
FILE: scapy/asn1packet.py
class ASN1Packet_metaclass (line 28) | class ASN1Packet_metaclass(Packet_metaclass):
method __new__ (line 29) | def __new__(cls,
class ASN1_Packet (line 43) | class ASN1_Packet(Packet, metaclass=ASN1Packet_metaclass):
method self_build (line 47) | def self_build(self):
method do_dissect (line 53) | def do_dissect(self, x):
FILE: scapy/automaton.py
function select_objects (line 64) | def select_objects(inputs, remain):
class ObjectPipe (line 159) | class ObjectPipe(Generic[_T]):
method __init__ (line 160) | def __init__(self, name=None):
method _wincreate (line 170) | def _wincreate(self):
method _winset (line 177) | def _winset(self):
method _winreset (line 182) | def _winreset(self):
method _winclose (line 187) | def _winclose(self):
method fileno (line 192) | def fileno(self):
method send (line 198) | def send(self, obj):
method write (line 206) | def write(self, obj):
method empty (line 210) | def empty(self):
method flush (line 214) | def flush(self):
method recv (line 218) | def recv(self, n=0, options=socket.MsgFlag(0)):
method read (line 232) | def read(self, n=0):
method clear (line 236) | def clear(self):
method close (line 242) | def close(self):
method __repr__ (line 255) | def __repr__(self):
method __del__ (line 259) | def __del__(self):
method select (line 264) | def select(sockets, remain=conf.recv_poll_rate):
class Message (line 276) | class Message:
method __init__ (line 283) | def __init__(self, **args):
method __repr__ (line 287) | def __repr__(self):
class Timer (line 296) | class Timer():
method __init__ (line 297) | def __init__(self, time, prio=0, autoreload=False):
method get (line 307) | def get(self):
method set (line 311) | def set(self, val):
method _reset (line 315) | def _reset(self):
method _reset_just_expired (line 321) | def _reset_just_expired(self):
method _running (line 325) | def _running(self):
method _remaining (line 329) | def _remaining(self):
method _decrement (line 333) | def _decrement(self, time):
method __lt__ (line 346) | def __lt__(self, obj):
method __gt__ (line 351) | def __gt__(self, obj):
method __eq__ (line 356) | def __eq__(self, obj):
method __repr__ (line 362) | def __repr__(self):
class _TimerList (line 367) | class _TimerList():
method __init__ (line 368) | def __init__(self):
method add_timer (line 372) | def add_timer(self, timer):
method reset (line 376) | def reset(self):
method decrement (line 381) | def decrement(self, time):
method expired (line 386) | def expired(self):
method until_next (line 394) | def until_next(self):
method count (line 401) | def count(self):
method __iter__ (line 405) | def __iter__(self):
method __repr__ (line 409) | def __repr__(self):
class _instance_state (line 414) | class _instance_state:
method __init__ (line 415) | def __init__(self, instance):
method __getattr__ (line 421) | def __getattr__(self, attr):
method __call__ (line 425) | def __call__(self, *args, **kargs):
method breaks (line 429) | def breaks(self):
method intercepts (line 433) | def intercepts(self):
method unbreaks (line 437) | def unbreaks(self):
method unintercepts (line 441) | def unintercepts(self):
class _StateWrapper (line 450) | class _StateWrapper:
class ATMT (line 469) | class ATMT:
class NewStateRequested (line 478) | class NewStateRequested(Exception):
method __init__ (line 479) | def __init__(self, state_func, automaton, *args, **kargs):
method action_parameters (line 493) | def action_parameters(self, *args, **kargs):
method run (line 499) | def run(self):
method __repr__ (line 503) | def __repr__(self):
method state (line 508) | def state(initial=0, # type: int
method action (line 540) | def action(cond, prio=0):
method condition (line 552) | def condition(state, prio=0):
method receive_condition (line 564) | def receive_condition(state, prio=0):
method ioevent (line 576) | def ioevent(state, # type: _StateWrapper
method timeout (line 594) | def timeout(state, timeout):
method timer (line 607) | def timer(state, timeout, prio=0):
method eof (line 620) | def eof(state):
class _ATMT_Command (line 631) | class _ATMT_Command:
class _ATMT_supersocket (line 647) | class _ATMT_supersocket(SuperSocket):
method __init__ (line 648) | def __init__(self,
method send (line 669) | def send(self, s):
method fileno (line 673) | def fileno(self):
method recv (line 679) | def recv(self, n=MTU, **kwargs): # type: ignore
method close (line 686) | def close(self):
method select (line 696) | def select(sockets, remain=conf.recv_poll_rate):
class _ATMT_to_supersocket (line 701) | class _ATMT_to_supersocket:
method __init__ (line 702) | def __init__(self, name, ioevent, automaton):
method __call__ (line 708) | def __call__(self, proto, *args, **kargs):
class Automaton_metaclass (line 716) | class Automaton_metaclass(type):
method __new__ (line 717) | def __new__(cls, name, bases, dct):
method build_graph (line 806) | def build_graph(self):
method graph (line 876) | def graph(self, **kargs):
class Automaton (line 882) | class Automaton(metaclass=Automaton_metaclass):
method __init__ (line 901) | def __init__(self, *args, **kargs):
method parse_args (line 960) | def parse_args(self, debug=0, store=0, session=None, **kargs):
method spawn (line 970) | def spawn(cls,
method master_filter (line 1073) | def master_filter(self, pkt):
method my_send (line 1077) | def my_send(self, pkt, **kwargs):
method update_sock (line 1083) | def update_sock(self, sock):
method timer_by_name (line 1095) | def timer_by_name(self, name):
class _IO_fdwrapper (line 1104) | class _IO_fdwrapper:
method __init__ (line 1105) | def __init__(self,
method fileno (line 1115) | def fileno(self):
method read (line 1123) | def read(self, n=65535):
method write (line 1131) | def write(self, msg):
method recv (line 1139) | def recv(self, n=65535):
method send (line 1143) | def send(self, msg):
class _IO_mixer (line 1147) | class _IO_mixer:
method __init__ (line 1148) | def __init__(self,
method fileno (line 1156) | def fileno(self):
method recv (line 1162) | def recv(self, n=None):
method read (line 1166) | def read(self, n=None):
method send (line 1170) | def send(self, msg):
method write (line 1174) | def write(self, msg):
class AutomatonException (line 1178) | class AutomatonException(Exception):
method __init__ (line 1179) | def __init__(self, msg, state=None, result=None):
class AutomatonError (line 1185) | class AutomatonError(AutomatonException):
class ErrorState (line 1188) | class ErrorState(AutomatonException):
class Stuck (line 1191) | class Stuck(AutomatonException):
class AutomatonStopped (line 1194) | class AutomatonStopped(AutomatonException):
class Breakpoint (line 1197) | class Breakpoint(AutomatonStopped):
class Singlestep (line 1200) | class Singlestep(AutomatonStopped):
class InterceptionPoint (line 1203) | class InterceptionPoint(AutomatonStopped):
method __init__ (line 1204) | def __init__(self, msg, state=None, result=None, packet=None):
class CommandMessage (line 1209) | class CommandMessage(AutomatonException):
method debug (line 1213) | def debug(self, lvl, msg):
method isrunning (line 1218) | def isrunning(self):
method send (line 1222) | def send(self, pkt, **kwargs):
method __iter__ (line 1252) | def __iter__(self):
method __del__ (line 1256) | def __del__(self):
method _run_condition (line 1260) | def _run_condition(self, cond, *args, **kargs):
method _do_start (line 1280) | def _do_start(self, *args, **kargs):
method _do_control (line 1293) | def _do_control(self, ready, *args, **kargs):
method _do_iter (line 1369) | def _do_iter(self):
method __repr__ (line 1477) | def __repr__(self):
method add_interception_points (line 1485) | def add_interception_points(self, *ipts):
method remove_interception_points (line 1492) | def remove_interception_points(self, *ipts):
method add_breakpoints (line 1499) | def add_breakpoints(self, *bps):
method remove_breakpoints (line 1506) | def remove_breakpoints(self, *bps):
method start (line 1513) | def start(self, *args, **kargs):
method run (line 1520) | def run(self,
method runbg (line 1553) | def runbg(self, resume=None, wait=False):
method __next__ (line 1557) | def __next__(self):
method _flush_inout (line 1561) | def _flush_inout(self):
method destroy (line 1567) | def destroy(self):
method stop (line 1586) | def stop(self, wait=True):
method forcestop (line 1596) | def forcestop(self, wait=True):
method restart (line 1606) | def restart(self, *args, **kargs):
method accept_packet (line 1611) | def accept_packet(self,
method reject_packet (line 1624) | def reject_packet(self,
FILE: scapy/autorun.py
class StopAutorun (line 37) | class StopAutorun(Scapy_Exception):
class StopAutorunTimeout (line 41) | class StopAutorunTimeout(StopAutorun):
class ScapyAutorunInterpreter (line 45) | class ScapyAutorunInterpreter(code.InteractiveInterpreter):
method __init__ (line 46) | def __init__(self, *args, **kargs):
method write (line 50) | def write(self, data):
function autorun_commands (line 55) | def autorun_commands(_cmds, my_globals=None, verb=None):
function autorun_commands_timeout (line 106) | def autorun_commands_timeout(cmds, timeout=None, **kwargs):
class StringWriter (line 129) | class StringWriter(StringIO):
method __init__ (line 132) | def __init__(self, debug=None):
method write (line 138) | def write(self, x):
method flush (line 147) | def flush(self):
function autorun_get_interactive_session (line 153) | def autorun_get_interactive_session(cmds, **kargs):
function autorun_get_interactive_live_session (line 182) | def autorun_get_interactive_live_session(cmds, **kargs):
function autorun_get_text_interactive_session (line 205) | def autorun_get_text_interactive_session(cmds, **kargs):
function autorun_get_live_interactive_session (line 216) | def autorun_get_live_interactive_session(cmds, **kargs):
function autorun_get_ansi_interactive_session (line 227) | def autorun_get_ansi_interactive_session(cmds, **kargs):
function autorun_get_html_interactive_session (line 238) | def autorun_get_html_interactive_session(cmds, **kargs):
function autorun_get_latex_interactive_session (line 258) | def autorun_get_latex_interactive_session(cmds, **kargs):
FILE: scapy/base_classes.py
class Gen (line 56) | class Gen(Generic[_T]):
method __iter__ (line 59) | def __iter__(self):
method __iterlen__ (line 63) | def __iterlen__(self):
function _get_values (line 68) | def _get_values(value):
class SetGen (line 83) | class SetGen(Gen[_T]):
method __init__ (line 84) | def __init__(self, values, _iterpacket=1):
method __iter__ (line 92) | def __iter__(self):
method __len__ (line 103) | def __len__(self):
method __repr__ (line 107) | def __repr__(self):
class _ScopedIP (line 112) | class _ScopedIP(str):
method __init__ (line 118) | def __init__(self, _: str) -> None:
method __repr__ (line 121) | def __repr__(self) -> str:
function ScopedIP (line 128) | def ScopedIP(net: str, scope: Optional[Any] = None) -> _ScopedIP:
class Net (line 160) | class Net(Gen[str]):
method name2addr (line 186) | def name2addr(cls, name):
method ip2int (line 202) | def ip2int(cls, addr):
method int2ip (line 209) | def int2ip(val):
method __init__ (line 213) | def __init__(self, net, stop=None, scope=None):
method __str__ (line 241) | def __str__(self):
method __iter__ (line 245) | def __iter__(self):
method __len__ (line 254) | def __len__(self):
method __iterlen__ (line 258) | def __iterlen__(self):
method choice (line 263) | def choice(self):
method __repr__ (line 270) | def __repr__(self):
method __eq__ (line 289) | def __eq__(self, other):
method __ne__ (line 299) | def __ne__(self, other):
method __hash__ (line 304) | def __hash__(self):
method __contains__ (line 308) | def __contains__(self, other):
class OID (line 319) | class OID(Gen[str]):
method __init__ (line 322) | def __init__(self, oid):
method __repr__ (line 335) | def __repr__(self):
method __iter__ (line 339) | def __iter__(self):
method __iterlen__ (line 355) | def __iterlen__(self):
class Packet_metaclass (line 364) | class Packet_metaclass(type):
method __new__ (line 365) | def __new__(cls: Type[_T],
method __getattr__ (line 455) | def __getattr__(self, attr):
method __call__ (line 462) | def __call__(cls,
class Field_metaclass (line 487) | class Field_metaclass(type):
method __new__ (line 488) | def __new__(cls: Type[_T],
class BasePacket (line 502) | class BasePacket(Gen['Packet']):
class BasePacketList (line 510) | class BasePacketList(Gen[_T]):
class _CanvasDumpExtended (line 514) | class _CanvasDumpExtended(object):
method canvas_dump (line 516) | def canvas_dump(self, layer_shift=0, rebuild=1):
method psdump (line 520) | def psdump(self, filename=None, **kargs):
method pdfdump (line 545) | def pdfdump(self, filename=None, **kargs):
method svgdump (line 570) | def svgdump(self, filename=None, **kargs):
FILE: scapy/cbor/cbor.py
class RandCBORObject (line 34) | class RandCBORObject(RandField["CBOR_Object[Any]"]):
method __init__ (line 37) | def __init__(self, objlist=None):
method _get_objlist (line 46) | def _get_objlist(self):
method _fix (line 66) | def _fix(self, n=0):
class CBOR_Error (line 167) | class CBOR_Error(Scapy_Exception):
class CBOR_Encoding_Error (line 171) | class CBOR_Encoding_Error(CBOR_Error):
class CBOR_Decoding_Error (line 175) | class CBOR_Decoding_Error(CBOR_Error):
class CBOR_BadTag_Decoding_Error (line 179) | class CBOR_BadTag_Decoding_Error(CBOR_Decoding_Error):
class CBORCodec (line 183) | class CBORCodec(EnumElement):
method register_stem (line 184) | def register_stem(cls, stem):
method dec (line 188) | def dec(cls, s, context=None):
method safedec (line 192) | def safedec(cls, s, context=None):
method get_stem (line 196) | def get_stem(cls):
class CBOR_Codecs_metaclass (line 201) | class CBOR_Codecs_metaclass(Enum_metaclass):
class CBOR_Codecs (line 205) | class CBOR_Codecs(metaclass=CBOR_Codecs_metaclass):
class CBORTag (line 209) | class CBORTag(EnumElement):
method __init__ (line 212) | def __init__(self,
method clone (line 223) | def clone(self):
method register_cbor_object (line 227) | def register_cbor_object(self, cborobj):
method cbor_object (line 231) | def cbor_object(self, val):
method register (line 237) | def register(self, codecnum, codec):
method get_codec (line 241) | def get_codec(self, codec):
class CBOR_MajorTypes_metaclass (line 250) | class CBOR_MajorTypes_metaclass(Enum_metaclass):
method __new__ (line 253) | def __new__(cls,
class CBOR_MajorTypes (line 274) | class CBOR_MajorTypes(metaclass=CBOR_MajorTypes_metaclass):
class CBOR_Object_metaclass (line 288) | class CBOR_Object_metaclass(type):
method __new__ (line 289) | def __new__(cls,
class CBOR_Object (line 310) | class CBOR_Object(Generic[_K], metaclass=CBOR_Object_metaclass):
method __init__ (line 314) | def __init__(self, val):
method enc (line 318) | def enc(self, codec=None):
method __repr__ (line 327) | def __repr__(self):
method __str__ (line 331) | def __str__(self):
method __bytes__ (line 335) | def __bytes__(self):
method strshow (line 339) | def strshow(self, lvl=0):
method show (line 343) | def show(self, lvl=0):
method __eq__ (line 347) | def __eq__(self, other):
class CBOR_UNSIGNED_INTEGER (line 357) | class CBOR_UNSIGNED_INTEGER(CBOR_Object[int]):
class CBOR_NEGATIVE_INTEGER (line 362) | class CBOR_NEGATIVE_INTEGER(CBOR_Object[int]):
class CBOR_BYTE_STRING (line 367) | class CBOR_BYTE_STRING(CBOR_Object[bytes]):
class CBOR_TEXT_STRING (line 372) | class CBOR_TEXT_STRING(CBOR_Object[str]):
class CBOR_ARRAY (line 377) | class CBOR_ARRAY(CBOR_Object[List[Any]]):
method strshow (line 381) | def strshow(self, lvl=0):
class CBOR_MAP (line 392) | class CBOR_MAP(CBOR_Object[Dict[Any, Any]]):
method strshow (line 396) | def strshow(self, lvl=0):
class CBOR_SEMANTIC_TAG (line 413) | class CBOR_SEMANTIC_TAG(CBOR_Object[Tuple[int, Any]]):
class CBOR_SIMPLE_VALUE (line 418) | class CBOR_SIMPLE_VALUE(CBOR_Object[int]):
class CBOR_FALSE (line 423) | class CBOR_FALSE(CBOR_Object[bool]):
method __init__ (line 427) | def __init__(self):
class CBOR_TRUE (line 432) | class CBOR_TRUE(CBOR_Object[bool]):
method __init__ (line 436) | def __init__(self):
class CBOR_NULL (line 441) | class CBOR_NULL(CBOR_Object[None]):
method __init__ (line 445) | def __init__(self):
class CBOR_UNDEFINED (line 450) | class CBOR_UNDEFINED(CBOR_Object[None]):
method __init__ (line 454) | def __init__(self):
class CBOR_FLOAT (line 459) | class CBOR_FLOAT(CBOR_Object[float]):
class _CBOR_ERROR (line 464) | class _CBOR_ERROR(CBOR_Object[Union[bytes, CBOR_Object[Any]]]):
class CBOR_DECODING_ERROR (line 469) | class CBOR_DECODING_ERROR(_CBOR_ERROR):
method __init__ (line 472) | def __init__(self, val, exc=None):
method __repr__ (line 477) | def __repr__(self):
method enc (line 485) | def enc(self, codec=None):
FILE: scapy/cbor/cborcodec.py
class CBOR_Exception (line 43) | class CBOR_Exception(Exception):
class CBOR_Codec_Encoding_Error (line 47) | class CBOR_Codec_Encoding_Error(CBOR_Encoding_Error):
method __init__ (line 48) | def __init__(self,
class CBOR_Codec_Decoding_Error (line 59) | class CBOR_Codec_Decoding_Error(CBOR_Decoding_Error):
method __init__ (line 60) | def __init__(self,
function CBOR_encode_head (line 71) | def CBOR_encode_head(major_type, value):
function CBOR_decode_head (line 94) | def CBOR_decode_head(s):
class CBORcodec_metaclass (line 145) | class CBORcodec_metaclass(type):
method __new__ (line 146) | def __new__(cls,
class CBORcodec_Object (line 164) | class CBORcodec_Object(Generic[_K], metaclass=CBORcodec_metaclass):
method cbor_object (line 170) | def cbor_object(cls, val):
method check_string (line 175) | def check_string(cls, s):
method do_dec (line 184) | def do_dec(cls,
method dec (line 194) | def dec(cls,
method safedec (line 210) | def safedec(cls,
method enc (line 218) | def enc(cls, s):
class CBORcodec_UNSIGNED_INTEGER (line 231) | class CBORcodec_UNSIGNED_INTEGER(CBORcodec_Object[int]):
method enc (line 236) | def enc(cls, obj):
method do_dec (line 247) | def do_dec(cls,
class CBORcodec_NEGATIVE_INTEGER (line 262) | class CBORcodec_NEGATIVE_INTEGER(CBORcodec_Object[int]):
method enc (line 267) | def enc(cls, obj):
method do_dec (line 279) | def do_dec(cls,
class CBORcodec_BYTE_STRING (line 295) | class CBORcodec_BYTE_STRING(CBORcodec_Object[bytes]):
method enc (line 300) | def enc(cls, obj):
method do_dec (line 309) | def do_dec(cls,
class CBORcodec_TEXT_STRING (line 328) | class CBORcodec_TEXT_STRING(CBORcodec_Object[str]):
method enc (line 333) | def enc(cls, obj):
method do_dec (line 344) | def do_dec(cls,
class CBORcodec_ARRAY (line 368) | class CBORcodec_ARRAY(CBORcodec_Object[List[Any]]):
method enc (line 373) | def enc(cls, obj):
method do_dec (line 383) | def do_dec(cls,
class CBORcodec_MAP (line 408) | class CBORcodec_MAP(CBORcodec_Object[Dict[Any, Any]]):
method enc (line 413) | def enc(cls, obj):
method do_dec (line 424) | def do_dec(cls,
class CBORcodec_SEMANTIC_TAG (line 459) | class CBORcodec_SEMANTIC_TAG(CBORcodec_Object[Tuple[int, Any]]):
method enc (line 464) | def enc(cls, obj):
method do_dec (line 474) | def do_dec(cls,
class CBORcodec_SIMPLE_AND_FLOAT (line 496) | class CBORcodec_SIMPLE_AND_FLOAT(CBORcodec_Object[Union[int, float, bool...
method enc (line 501) | def enc(cls, obj):
method do_dec (line 539) | def do_dec(cls,
function _encode_cbor_item (line 641) | def _encode_cbor_item(item):
function _decode_cbor_item (line 673) | def _decode_cbor_item(s, safe=False):
FILE: scapy/compat.py
function _FakeType (line 57) | def _FakeType(name, cls=object):
class Protocol (line 87) | class Protocol:
class StrEnum (line 110) | class StrEnum(str, enum.Enum):
function raw (line 128) | def raw(x):
function bytes_encode (line 137) | def bytes_encode(x):
function plain_str (line 148) | def plain_str(x):
function chb (line 156) | def chb(x):
function orb (line 162) | def orb(x):
function bytes_hex (line 170) | def bytes_hex(x):
function hex_bytes (line 176) | def hex_bytes(x):
function int_bytes (line 182) | def int_bytes(x, size):
function bytes_int (line 188) | def bytes_int(x):
function base64_bytes (line 194) | def base64_bytes(x):
function bytes_base64 (line 200) | def bytes_base64(x):
FILE: scapy/config.py
class ConfClass (line 74) | class ConfClass(object):
method configure (line 75) | def configure(self, cnf):
method __repr__ (line 79) | def __repr__(self):
method __str__ (line 83) | def __str__(self):
class Interceptor (line 100) | class Interceptor(object):
method __init__ (line 101) | def __init__(self,
method __get__ (line 116) | def __get__(self, obj, typ=None):
method set_from_hook (line 123) | def set_from_hook(obj, name, val):
method __set__ (line 128) | def __set__(self, obj, val):
function _readonly (line 135) | def _readonly(name):
class ProgPath (line 149) | class ProgPath(ConfClass):
class ConfigFieldList (line 169) | class ConfigFieldList:
method __init__ (line 170) | def __init__(self):
method _is_field (line 176) | def _is_field(f):
method _recalc_layer_list (line 180) | def _recalc_layer_list(self):
method add (line 184) | def add(self, *flds):
method remove (line 189) | def remove(self, *flds):
method __contains__ (line 194) | def __contains__(self, elt):
method __repr__ (line 200) | def __repr__(self):
class Emphasize (line 205) | class Emphasize(ConfigFieldList):
class Resolve (line 209) | class Resolve(ConfigFieldList):
class Num2Layer (line 213) | class Num2Layer:
method __init__ (line 214) | def __init__(self):
method register (line 219) | def register(self, num, layer):
method register_num2layer (line 224) | def register_num2layer(self, num, layer):
method register_layer2num (line 228) | def register_layer2num(self, num, layer):
method __getitem__ (line 233) | def __getitem__(self, item):
method __getitem__ (line 238) | def __getitem__(self, item): # noqa: F811
method __getitem__ (line 242) | def __getitem__(self, item): # noqa: F811
method __contains__ (line 249) | def __contains__(self, item):
method get (line 256) | def get(self,
method __repr__ (line 263) | def __repr__(self):
class LayersList (line 281) | class LayersList(List[Type['scapy.packet.Packet']]):
method __init__ (line 282) | def __init__(self):
method __repr__ (line 289) | def __repr__(self):
method register (line 294) | def register(self, layer):
method layers (line 307) | def layers(self):
method filter (line 324) | def filter(self, items):
method unfilter (line 338) | def unfilter(self):
class CommandsList (line 350) | class CommandsList(List[Callable[..., Any]]):
method __repr__ (line 351) | def __repr__(self):
method register (line 360) | def register(self, cmd):
function lsc (line 366) | def lsc():
class CacheInstance (line 372) | class CacheInstance(Dict[str, Any]):
method __init__ (line 375) | def __init__(self, name="noname", timeout=None):
method flush (line 381) | def flush(self):
method __getitem__ (line 386) | def __getitem__(self, item):
method __contains__ (line 394) | def __contains__(self, item):
method get (line 403) | def get(self, item, default=None):
method __setitem__ (line 412) | def __setitem__(self, item, v):
method update (line 419) | def update(self,
method iteritems (line 431) | def iteritems(self):
method iterkeys (line 442) | def iterkeys(self):
method __iter__ (line 453) | def __iter__(self):
method itervalues (line 457) | def itervalues(self):
method items (line 468) | def items(self):
method keys (line 472) | def keys(self):
method values (line 476) | def values(self):
method __len__ (line 480) | def __len__(self):
method summary (line 486) | def summary(self):
method __repr__ (line 490) | def __repr__(self):
method copy (line 500) | def copy(self):
class NetCache (line 505) | class NetCache:
method __init__ (line 506) | def __init__(self):
method add_cache (line 510) | def add_cache(self, cache):
method new_cache (line 515) | def new_cache(self, name, timeout=None):
method __delattr__ (line 521) | def __delattr__(self, attr):
method update (line 525) | def update(self, other):
method flush (line 533) | def flush(self):
method __repr__ (line 538) | def __repr__(self):
class ScapyExt (line 543) | class ScapyExt:
class MODE (line 546) | class MODE(Enum):
class ScapyExtSpec (line 552) | class ScapyExtSpec:
method __init__ (line 558) | def __init__(self):
method config (line 562) | def config(self, name, version):
method register (line 566) | def register(self, name, mode, path, default=None):
method register_bashcompletion (line 583) | def register_bashcompletion(self, script: pathlib.Path):
method __repr__ (line 586) | def __repr__(self):
class ExtsManager (line 594) | class ExtsManager(importlib.abc.MetaPathFinder):
method __init__ (line 602) | def __init__(self):
method find_spec (line 610) | def find_spec(self, fullname, path, target=None):
method invalidate_caches (line 614) | def invalidate_caches(self):
method _register_spec (line 617) | def _register_spec(self, spec):
method load (line 629) | def load(self, extension: str):
method loadall (line 708) | def loadall(self) -> None:
method __repr__ (line 715) | def __repr__(self):
function _version_checker (line 727) | def _version_checker(module, minver):
function isCryptographyValid (line 748) | def isCryptographyValid():
function isCryptographyAdvanced (line 764) | def isCryptographyAdvanced():
function isCryptographyBackendCompatible (line 783) | def isCryptographyBackendCompatible() -> bool:
function isPyPy (line 800) | def isPyPy():
function _prompt_changer (line 810) | def _prompt_changer(attr, val, old):
function _set_conf_sockets (line 827) | def _set_conf_sockets():
function _socket_changer (line 889) | def _socket_changer(attr, val, old):
function _loglevel_changer (line 913) | def _loglevel_changer(attr, val, old):
function _iface_changer (line 920) | def _iface_changer(attr, val, old):
function _reset_tls_nss_keys (line 935) | def _reset_tls_nss_keys(attr, val, old):
class Conf (line 942) | class Conf(ConfClass):
method __getattribute__ (line 1189) | def __getattribute__(self, attr):
function crypto_validator (line 1239) | def crypto_validator(func):
function scapy_delete_temp_files (line 1254) | def scapy_delete_temp_files():
FILE: scapy/contrib/altbeacon.py
class AltBeacon (line 42) | class AltBeacon(Packet, LowEnergyBeaconHelper):
method magic_check (line 67) | def magic_check(cls, payload):
method build_eir (line 73) | def build_eir(self):
FILE: scapy/contrib/aoe.py
class IssueATACommand (line 19) | class IssueATACommand(Packet):
method extract_padding (line 35) | def extract_padding(self, s):
class QueryConfigInformation (line 39) | class QueryConfigInformation(Packet):
method extract_padding (line 54) | def extract_padding(self, s):
class Directive (line 58) | class Directive(Packet):
class MacMaskList (line 68) | class MacMaskList(Packet):
method extract_padding (line 81) | def extract_padding(self, s):
class ReserveRelease (line 85) | class ReserveRelease(Packet):
method extract_padding (line 94) | def extract_padding(self, s):
class AOE (line 98) | class AOE(Packet):
method extract_padding (line 130) | def extract_padding(self, s):
FILE: scapy/contrib/automotive/autosar/pdu.py
class PDU (line 16) | class PDU(Packet):
method extract_padding (line 31) | def extract_padding(self, s):
class PDUTransport (line 36) | class PDUTransport(Packet):
FILE: scapy/contrib/automotive/autosar/secoc.py
class SecOCMixin (line 36) | class SecOCMixin:
method secoc_authenticate (line 41) | def secoc_authenticate(self) -> None:
method secoc_verify (line 44) | def secoc_verify(self) -> bool:
method get_secoc_payload (line 47) | def get_secoc_payload(self) -> bytes:
method get_secoc_key (line 52) | def get_secoc_key(self) -> bytes:
method get_secoc_freshness_value (line 57) | def get_secoc_freshness_value(self) -> bytes:
method get_message_authentication_code (line 62) | def get_message_authentication_code(self):
method calculate_cmac (line 69) | def calculate_cmac(key: bytes, payload: bytes, freshness_value: bytes)...
method register_secoc_protected_pdu (line 75) | def register_secoc_protected_pdu(cls,
method unregister_secoc_protected_pdu (line 83) | def unregister_secoc_protected_pdu(cls, pdu_id: int) -> None:
class PduPayloadField (line 88) | class PduPayloadField(PacketLenField):
method __init__ (line 91) | def __init__(self,
method m2i (line 102) | def m2i(self, pkt, m): # type: ignore
FILE: scapy/contrib/automotive/autosar/secoc_canfd.py
class SecOC_CANFD (line 30) | class SecOC_CANFD(CANFD, SecOCMixin):
method secoc_authenticate (line 49) | def secoc_authenticate(self) -> None:
method secoc_verify (line 53) | def secoc_verify(self) -> bool:
method get_secoc_payload (line 56) | def get_secoc_payload(self) -> bytes:
method dispatch_hook (line 62) | def dispatch_hook(cls, s=None, *_args, **_kwds):
method get_pdu_payload_cls (line 79) | def get_pdu_payload_cls(cls,
method extract_padding (line 89) | def extract_padding(self, s):
FILE: scapy/contrib/automotive/autosar/secoc_pdu.py
class SecOC_PDU (line 31) | class SecOC_PDU(Packet, SecOCMixin):
method secoc_authenticate (line 46) | def secoc_authenticate(self) -> None:
method secoc_verify (line 50) | def secoc_verify(self) -> bool:
method get_secoc_payload (line 53) | def get_secoc_payload(self) -> bytes:
method dispatch_hook (line 59) | def dispatch_hook(cls, s=None, *_args, **_kwds):
method get_pdu_payload_cls (line 76) | def get_pdu_payload_cls(cls,
method extract_padding (line 86) | def extract_padding(self, s):
class SecOC_PDUTransport (line 91) | class SecOC_PDUTransport(Packet):
method register_secoc_protected_pdu (line 102) | def register_secoc_protected_pdu(pdu_id: int,
method unregister_secoc_protected_pdu (line 108) | def unregister_secoc_protected_pdu(pdu_id: int) -> None:
FILE: scapy/contrib/automotive/bmw/definitions.py
class IOCBLI_REQ (line 69) | class IOCBLI_REQ(Packet):
class RDTCBS_REQ (line 90) | class RDTCBS_REQ(Packet):
class RSODTC_REQ (line 101) | class RSODTC_REQ(Packet):
class REI_IDENT_REQ (line 111) | class REI_IDENT_REQ(Packet):
class SPRBLI_REQ (line 121) | class SPRBLI_REQ(Packet):
class ENMT_REQ (line 148) | class ENMT_REQ(Packet):
class WDBLI_REQ (line 158) | class WDBLI_REQ(Packet):
class RDS2TCM_REQ (line 169) | class RDS2TCM_REQ(Packet):
class RDBLI_REQ (line 179) | class RDBLI_REQ(Packet):
class RRRBA_REQ (line 189) | class RRRBA_REQ(Packet):
class RRRBLI_REQ (line 200) | class RRRBLI_REQ(Packet):
class SPRBA_REQ (line 210) | class SPRBA_REQ(Packet):
class STRBA_REQ (line 222) | class STRBA_REQ(Packet):
class UDS2S_REQ (line 234) | class UDS2S_REQ(Packet):
class SVK_DateField (line 247) | class SVK_DateField(LEThreeBytesField):
method i2repr (line 248) | def i2repr(self, pkt, x):
class SVK_Entry (line 253) | class SVK_Entry(Packet):
method extract_padding (line 313) | def extract_padding(self, p):
class SVK (line 317) | class SVK(Packet):
method get_length (line 325) | def get_length(p: Packet):
class DIAG_SESSION_RESP (line 338) | class DIAG_SESSION_RESP(Packet):
class IP_CONFIG_RESP (line 345) | class IP_CONFIG_RESP(Packet):
class DEV_JOB (line 358) | class DEV_JOB(Packet):
class DEV_JOB_PR (line 385) | class DEV_JOB_PR(Packet):
method answers (line 390) | def answers(self, other):
class READ_MEM (line 401) | class READ_MEM(Packet):
class READ_MEM_PR (line 408) | class READ_MEM_PR(Packet):
class WEBSERVER (line 414) | class WEBSERVER(Packet):
FILE: scapy/contrib/automotive/bmw/enumerator.py
class BMW_DevJobEnumerator (line 22) | class BMW_DevJobEnumerator(UDS_Enumerator):
method _get_initial_requests (line 26) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 31) | def _get_table_entry_y(self, tup):
FILE: scapy/contrib/automotive/bmw/hsfz.py
class HSFZ (line 41) | class HSFZ(Packet):
method _has_srctgt_addrs (line 75) | def _has_srctgt_addrs(self):
method _has_exprecv_addrs (line 83) | def _has_exprecv_addrs(self):
method _hasidstring (line 88) | def _hasidstring(self):
method hashret (line 95) | def hashret(self):
method extract_padding (line 101) | def extract_padding(self, s):
method post_build (line 105) | def post_build(self, pkt, pay):
class HSFZSocket (line 129) | class HSFZSocket(StreamSocket):
method __init__ (line 130) | def __init__(self, ip='127.0.0.1', port=6801):
method recv (line 141) | def recv(self, x=MTU, **kwargs):
class UDS_HSFZSocket (line 162) | class UDS_HSFZSocket(HSFZSocket):
method __init__ (line 163) | def __init__(self, source, target, ip='127.0.0.1', port=6801, basecls=...
method send (line 171) | def send(self, x):
method recv (line 194) | def recv(self, x=MTU, **kwargs):
function hsfz_scan (line 203) | def hsfz_scan(ip, # type: str
FILE: scapy/contrib/automotive/ccp.py
class CCP (line 18) | class CCP(CAN):
method extract_padding (line 29) | def extract_padding(self, p):
class CRO (line 33) | class CRO(Packet):
method hashret (line 70) | def hashret(self):
class CONNECT (line 76) | class CONNECT(Packet):
class GET_CCP_VERSION (line 86) | class GET_CCP_VERSION(Packet):
class EXCHANGE_ID (line 97) | class EXCHANGE_ID(Packet):
class GET_SEED (line 106) | class GET_SEED(Packet):
class UNLOCK (line 116) | class UNLOCK(Packet):
class SET_MTA (line 125) | class SET_MTA(Packet):
class DNLOAD (line 136) | class DNLOAD(Packet):
class DNLOAD_6 (line 146) | class DNLOAD_6(Packet):
class UPLOAD (line 155) | class UPLOAD(Packet):
class SHORT_UP (line 165) | class SHORT_UP(Packet):
class SELECT_CAL_PAGE (line 176) | class SELECT_CAL_PAGE(Packet):
class GET_DAQ_SIZE (line 185) | class GET_DAQ_SIZE(Packet):
class SET_DAQ_PTR (line 196) | class SET_DAQ_PTR(Packet):
class WRITE_DAQ (line 208) | class WRITE_DAQ(Packet):
class START_STOP (line 219) | class START_STOP(Packet):
class DISCONNECT (line 232) | class DISCONNECT(Packet):
class SET_S_STATUS (line 244) | class SET_S_STATUS(Packet):
class GET_S_STATUS (line 256) | class GET_S_STATUS(Packet):
class BUILD_CHKSUM (line 265) | class BUILD_CHKSUM(Packet):
class CLEAR_MEMORY (line 275) | class CLEAR_MEMORY(Packet):
class PROGRAM (line 285) | class PROGRAM(Packet):
class PROGRAM_6 (line 298) | class PROGRAM_6(Packet):
class MOVE (line 307) | class MOVE(Packet):
class TEST (line 317) | class TEST(Packet):
class GET_ACTIVE_CAL_PAGE (line 327) | class GET_ACTIVE_CAL_PAGE(Packet):
class START_STOP_ALL (line 336) | class START_STOP_ALL(Packet):
class DIAG_SERVICE (line 347) | class DIAG_SERVICE(Packet):
class ACTION_SERVICE (line 357) | class ACTION_SERVICE(Packet):
class DEFAULT_DTO (line 369) | class DEFAULT_DTO(Packet):
class GET_CCP_VERSION_DTO (line 375) | class GET_CCP_VERSION_DTO(Packet):
class EXCHANGE_ID_DTO (line 383) | class EXCHANGE_ID_DTO(Packet):
class GET_SEED_DTO (line 393) | class GET_SEED_DTO(Packet):
class UNLOCK_DTO (line 400) | class UNLOCK_DTO(Packet):
class DNLOAD_DTO (line 407) | class DNLOAD_DTO(Packet):
class DNLOAD_6_DTO (line 414) | class DNLOAD_6_DTO(Packet):
class UPLOAD_DTO (line 421) | class UPLOAD_DTO(Packet):
class SHORT_UP_DTO (line 427) | class SHORT_UP_DTO(Packet):
class GET_DAQ_SIZE_DTO (line 433) | class GET_DAQ_SIZE_DTO(Packet):
class GET_S_STATUS_DTO (line 441) | class GET_S_STATUS_DTO(Packet):
class BUILD_CHKSUM_DTO (line 450) | class BUILD_CHKSUM_DTO(Packet):
class PROGRAM_DTO (line 460) | class PROGRAM_DTO(Packet):
class PROGRAM_6_DTO (line 467) | class PROGRAM_6_DTO(Packet):
class GET_ACTIVE_CAL_PAGE_DTO (line 474) | class GET_ACTIVE_CAL_PAGE_DTO(Packet):
class DIAG_SERVICE_DTO (line 481) | class DIAG_SERVICE_DTO(Packet):
class ACTION_SERVICE_DTO (line 489) | class ACTION_SERVICE_DTO(Packet):
class DTO (line 497) | class DTO(Packet):
method __init__ (line 526) | def __init__(self, *args, **kwargs):
method __eq__ (line 533) | def __eq__(self, other):
method guess_payload_class (line 537) | def guess_payload_class(self, payload):
method get_dto_cls (line 541) | def get_dto_cls(cmd):
method answers (line 564) | def answers(self, other):
method hashret (line 588) | def hashret(self):
FILE: scapy/contrib/automotive/doip.py
class DoIP (line 48) | class DoIP(Packet):
method answers (line 228) | def answers(self, other):
method hashret (line 244) | def hashret(self):
method post_build (line 267) | def post_build(self, pkt, pay):
method extract_padding (line 277) | def extract_padding(self, s):
method tcp_reassemble (line 285) | def tcp_reassemble(cls, data, metadata, session):
class DoIPSSLStreamSocket (line 303) | class DoIPSSLStreamSocket(SSLStreamSocket):
method __init__ (line 307) | def __init__(self, sock, basecls=None):
method recv (line 312) | def recv(self, x=MTU, **kwargs):
class DoIPSocket (line 333) | class DoIPSocket(DoIPSSLStreamSocket):
method __init__ (line 365) | def __init__(self,
method _init_socket (line 397) | def _init_socket(self):
method _activate_routing (line 461) | def _activate_routing(self): # type: (...) -> int
method send (line 482) | def send(self, x): # type: (Packet) -> int
class UDS_DoIPSocket (line 489) | class UDS_DoIPSocket(DoIPSocket):
method send (line 500) | def send(self, x):
method recv (line 517) | def recv(self, x=MTU, **kwargs):
FILE: scapy/contrib/automotive/ecu.py
class EcuState (line 45) | class EcuState(object):
method __init__ (line 53) | def __init__(self, **kwargs):
method _expand (line 61) | def _expand(self):
method _flatten (line 78) | def _flatten(x):
method __delitem__ (line 94) | def __delitem__(self, key):
method __len__ (line 99) | def __len__(self):
method __getitem__ (line 103) | def __getitem__(self, item):
method __setitem__ (line 107) | def __setitem__(self, key, value):
method __repr__ (line 112) | def __repr__(self):
method __eq__ (line 117) | def __eq__(self, other):
method __contains__ (line 128) | def __contains__(self, item):
method __ne__ (line 134) | def __ne__(self, other):
method __lt__ (line 138) | def __lt__(self, other):
method __hash__ (line 177) | def __hash__(self):
method reset (line 181) | def reset(self):
method command (line 188) | def command(self):
method extend_pkt_with_modifier (line 195) | def extend_pkt_with_modifier(cls):
method is_modifier_pkt (line 217) | def is_modifier_pkt(pkt):
method get_modified_ecu_state (line 229) | def get_modified_ecu_state(response, request, state, modify_in_place=F...
class Ecu (line 258) | class Ecu(object):
method __init__ (line 288) | def __init__(self, logging=True, verbose=True,
method reset (line 300) | def reset(self):
method update (line 307) | def update(self, p):
method __update (line 322) | def __update(self, pkt):
method __update_log (line 334) | def __update_log(self, pkt):
method __update_supported_responses (line 353) | def __update_supported_responses(self, pkt):
method sort_key_func (line 393) | def sort_key_func(resp):
method supported_responses (line 412) | def supported_responses(self):
method unanswered_packets (line 425) | def unanswered_packets(self):
method __repr__ (line 434) | def __repr__(self):
method extend_pkt_with_logging (line 439) | def extend_pkt_with_logging(cls):
class EcuSession (line 455) | class EcuSession(DefaultSession):
method __init__ (line 470) | def __init__(self, *args, **kwargs):
method process (line 477) | def process(self, pkt: Packet) -> Optional[Packet]:
class EcuResponse (line 484) | class EcuResponse:
method __init__ (line 510) | def __init__(self, state=None, responses=Raw(b"\x7f\x10"), answers=None):
method states (line 535) | def states(self):
method responses (line 540) | def responses(self):
method key_response (line 545) | def key_response(self):
method supports_state (line 550) | def supports_state(self, state):
method answers (line 557) | def answers(self, other):
method __repr__ (line 564) | def __repr__(self):
method __eq__ (line 570) | def __eq__(self, other):
method __ne__ (line 584) | def __ne__(self, other):
method command (line 589) | def command(self):
class EcuAnsweringMachine (line 602) | class EcuAnsweringMachine(AnsweringMachine[PacketList]):
method parse_options (line 618) | def parse_options(
method state (line 657) | def state(self):
method reset_state (line 661) | def reset_state(self):
method is_request (line 666) | def is_request(self, req):
method make_reply (line 670) | def make_reply(self, req):
method send_reply (line 706) | def send_reply(self, reply, send_function=None):
FILE: scapy/contrib/automotive/gm/gmlan.py
class GMLAN (line 54) | class GMLAN(ISOTP):
method determine_len (line 56) | def determine_len(x):
method answers (line 115) | def answers(self, other):
method hashret (line 128) | def hashret(self):
class GMLAN_IDO (line 135) | class GMLAN_IDO(Packet):
class GMLAN_DTC (line 150) | class GMLAN_DTC(Packet):
method extract_padding (line 159) | def extract_padding(self, p):
class GMLAN_RFRD (line 163) | class GMLAN_RFRD(Packet):
class GMLAN_RFRDPR (line 178) | class GMLAN_RFRDPR(Packet):
method answers (line 184) | def answers(self, other):
class GMLAN_RFRDPR_RFRI (line 192) | class GMLAN_RFRDPR_RFRI(Packet):
class GMLAN_RFRDPR_RFRP (line 208) | class GMLAN_RFRDPR_RFRP(Packet):
class GMLAN_RDBI (line 219) | class GMLAN_RDBI(Packet):
class GMLAN_RDBIPR (line 314) | class GMLAN_RDBIPR(Packet):
method answers (line 320) | def answers(self, other):
class GMLAN_RDBPI (line 329) | class GMLAN_RDBPI(Packet):
class GMLAN_RDBPIPR (line 346) | class GMLAN_RDBPIPR(Packet):
method answers (line 352) | def answers(self, other):
class GMLAN_RDBPKTI (line 361) | class GMLAN_RDBPKTI(Packet):
class GMLAN_RMBA (line 383) | class GMLAN_RMBA(Packet):
class GMLAN_RMBAPR (line 403) | class GMLAN_RMBAPR(Packet):
method answers (line 419) | def answers(self, other):
class GMLAN_SA (line 428) | class GMLAN_SA(Packet):
class GMLAN_SAPR (line 455) | class GMLAN_SAPR(Packet):
method answers (line 463) | def answers(self, other):
class GMLAN_DDM (line 472) | class GMLAN_DDM(Packet):
class GMLAN_DDMPR (line 483) | class GMLAN_DDMPR(Packet):
method answers (line 489) | def answers(self, other):
class GMLAN_DPBA (line 498) | class GMLAN_DPBA(Packet):
class GMLAN_DPBAPR (line 519) | class GMLAN_DPBAPR(Packet):
method answers (line 525) | def answers(self, other):
class GMLAN_RD (line 534) | class GMLAN_RD(Packet):
class GMLAN_TD (line 555) | class GMLAN_TD(Packet):
class GMLAN_WDBI (line 581) | class GMLAN_WDBI(Packet):
class GMLAN_WDBIPR (line 592) | class GMLAN_WDBIPR(Packet):
method answers (line 598) | def answers(self, other):
class GMLAN_RPSPR (line 607) | class GMLAN_RPSPR(Packet):
class GMLAN_PM (line 630) | class GMLAN_PM(Packet):
class GMLAN_RDI (line 646) | class GMLAN_RDI(Packet):
class GMLAN_RDI_BN (line 661) | class GMLAN_RDI_BN(Packet):
class GMLAN_RDI_BM (line 673) | class GMLAN_RDI_BM(Packet):
class GMLAN_RDI_BC (line 683) | class GMLAN_RDI_BC(Packet):
class GMLAN_DC (line 697) | class GMLAN_DC(Packet):
class GMLAN_DCPR (line 708) | class GMLAN_DCPR(Packet):
method answers (line 714) | def answers(self, other):
class GMLAN_NR (line 723) | class GMLAN_NR(Packet):
method answers (line 748) | def answers(self, other):
FILE: scapy/contrib/automotive/gm/gmlan_ecu_states.py
function GMLAN_modify_ecu_state (line 16) | def GMLAN_modify_ecu_state(self, req, state):
function GMLAN_SAPR_modify_ecu_state (line 34) | def GMLAN_SAPR_modify_ecu_state(self, req, state):
FILE: scapy/contrib/automotive/gm/gmlan_logging.py
function GMLAN_IDO_get_log (line 26) | def GMLAN_IDO_get_log(self):
function GMLAN_RFRD_get_log (line 33) | def GMLAN_RFRD_get_log(self):
function GMLAN_RFRDPR_get_log (line 40) | def GMLAN_RFRDPR_get_log(self):
function GMLAN_RDBI_get_log (line 47) | def GMLAN_RDBI_get_log(self):
function GMLAN_RDBIPR_get_log (line 54) | def GMLAN_RDBIPR_get_log(self):
function GMLAN_RDBPI_get_log (line 62) | def GMLAN_RDBPI_get_log(self):
function GMLAN_RDBPIPR_get_log (line 69) | def GMLAN_RDBPIPR_get_log(self):
function GMLAN_RDBPKTI_get_log (line 76) | def GMLAN_RDBPKTI_get_log(self):
function GMLAN_RMBA_get_log (line 83) | def GMLAN_RMBA_get_log(self):
function GMLAN_RMBAPR_get_log (line 90) | def GMLAN_RMBAPR_get_log(self):
function GMLAN_SA_get_log (line 97) | def GMLAN_SA_get_log(self):
function GMLAN_SAPR_get_log (line 108) | def GMLAN_SAPR_get_log(self):
function GMLAN_DDM_get_log (line 119) | def GMLAN_DDM_get_log(self):
function GMLAN_DDMPR_get_log (line 126) | def GMLAN_DDMPR_get_log(self):
function GMLAN_DPBA_get_log (line 133) | def GMLAN_DPBA_get_log(self):
function GMLAN_DPBAPR_get_log (line 140) | def GMLAN_DPBAPR_get_log(self):
function GMLAN_RD_get_log (line 146) | def GMLAN_RD_get_log(self):
function GMLAN_TD_get_log (line 153) | def GMLAN_TD_get_log(self):
function GMLAN_WDBI_get_log (line 161) | def GMLAN_WDBI_get_log(self):
function GMLAN_WDBIPR_get_log (line 168) | def GMLAN_WDBIPR_get_log(self):
function GMLAN_RPSPR_get_log (line 175) | def GMLAN_RPSPR_get_log(self):
function GMLAN_PM_get_log (line 182) | def GMLAN_PM_get_log(self):
function GMLAN_RDI_get_log (line 189) | def GMLAN_RDI_get_log(self):
function GMLAN_DC_get_log (line 196) | def GMLAN_DC_get_log(self):
function GMLAN_DCPR_get_log (line 203) | def GMLAN_DCPR_get_log(self):
function GMLAN_NR_get_log (line 210) | def GMLAN_NR_get_log(self):
FILE: scapy/contrib/automotive/gm/gmlan_scanner.py
class GMLAN_Enumerator (line 65) | class GMLAN_Enumerator(ServiceEnumerator, metaclass=abc.ABCMeta):
method _get_negative_response_code (line 71) | def _get_negative_response_code(resp):
method _get_negative_response_desc (line 76) | def _get_negative_response_desc(nrc):
method _get_negative_response_label (line 81) | def _get_negative_response_label(response):
method _get_table_entry_z (line 85) | def _get_table_entry_z(self, tup):
method _get_initial_requests (line 89) | def _get_initial_requests(self, **kwargs):
class GMLAN_ServiceEnumerator (line 94) | class GMLAN_ServiceEnumerator(GMLAN_Enumerator, StateGeneratingServiceEn...
method _get_initial_requests (line 102) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 111) | def _get_table_entry_y(self, tup):
class GMLAN_TPEnumerator (line 117) | class GMLAN_TPEnumerator(GMLAN_Enumerator, StateGeneratingServiceEnumera...
method _get_initial_requests (line 124) | def _get_initial_requests(self, **kwargs):
method enter (line 129) | def enter(socket, # type: _SocketUnion
method cleanup (line 146) | def cleanup(_, configuration):
method get_transition_function (line 156) | def get_transition_function(self, socket, edge):
method _get_table_entry_y (line 160) | def _get_table_entry_y(self, tup):
class GMLAN_IDOEnumerator (line 165) | class GMLAN_IDOEnumerator(GMLAN_Enumerator, StateGeneratingServiceEnumer...
method _get_initial_requests (line 168) | def _get_initial_requests(self, **kwargs):
method enter_diagnostic_session (line 173) | def enter_diagnostic_session(socket):
method get_new_edge (line 183) | def get_new_edge(self, socket, config):
method enter_state_with_tp (line 193) | def enter_state_with_tp(sock, conf, kwargs):
method get_transition_function (line 202) | def get_transition_function(self, socket, edge):
method _get_table_entry_y (line 206) | def _get_table_entry_y(self, tup):
class GMLAN_RDBIEnumerator (line 211) | class GMLAN_RDBIEnumerator(GMLAN_Enumerator):
method _get_initial_requests (line 214) | def _get_initial_requests(self, **kwargs):
method print_information (line 220) | def print_information(resp):
method _get_table_entry_y (line 225) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 230) | def _get_table_entry_z(self, tup):
class GMLAN_WDBIEnumerator (line 235) | class GMLAN_WDBIEnumerator(GMLAN_Enumerator):
method execute (line 248) | def execute(self, socket, state, **kwargs):
method _get_initial_requests (line 254) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 269) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 274) | def _get_table_entry_z(self, tup):
class GMLAN_WDBISelectiveEnumerator (line 279) | class GMLAN_WDBISelectiveEnumerator(StagedAutomotiveTestCase):
method __connector_rdbi_to_wdbi (line 281) | def __connector_rdbi_to_wdbi(rdbi, _):
method __init__ (line 285) | def __init__(self):
class GMLAN_SAEnumerator (line 292) | class GMLAN_SAEnumerator(GMLAN_Enumerator, StateGenerator):
method execute (line 305) | def execute(self, socket, state, **kwargs):
method _get_initial_requests (line 311) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 316) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 320) | def _get_table_entry_z(self, tup):
method pre_execute (line 324) | def pre_execute(self, socket, state, global_configuration):
method _evaluate_retry (line 333) | def _evaluate_retry(self,
method _evaluate_response (line 354) | def _evaluate_response(self,
method get_seed_pkt (line 371) | def get_seed_pkt(sock, level=1):
method evaluate_security_access_response (line 394) | def evaluate_security_access_response(res, seed, key):
method get_key_pkt (line 407) | def get_key_pkt(seed, keyfunction, level=1):
method get_security_access (line 418) | def get_security_access(sock, level=1, seed_pkt=None, keyfunction=None):
method transition_function (line 439) | def transition_function(sock, _, kwargs):
method get_new_edge (line 444) | def get_new_edge(self, socket, config):
method get_transition_function (line 477) | def get_transition_function(self, socket, edge):
class GMLAN_RDEnumerator (line 485) | class GMLAN_RDEnumerator(GMLAN_Enumerator, StateGeneratingServiceEnumera...
method _get_initial_requests (line 488) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 492) | def _get_table_entry_y(self, tup):
class GMLAN_PMEnumerator (line 497) | class GMLAN_PMEnumerator(GMLAN_Enumerator, StateGeneratingServiceEnumera...
method _get_initial_requests (line 500) | def _get_initial_requests(self, **kwargs):
method execute (line 504) | def execute(self, socket, state, timeout=1, execution_time=1200, **kwa...
method get_new_edge (line 520) | def get_new_edge(self, socket, config):
method enter_state_with_tp (line 531) | def enter_state_with_tp(sock, conf, kwargs):
method get_transition_function (line 542) | def get_transition_function(self, socket, edge):
method _get_table_entry_y (line 547) | def _get_table_entry_y(self, tup):
class GMLAN_RDBPIEnumerator (line 552) | class GMLAN_RDBPIEnumerator(GMLAN_Enumerator):
method _get_initial_requests (line 555) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 560) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 566) | def _get_table_entry_z(self, tup):
class GMLAN_RMBAEnumerator (line 571) | class GMLAN_RMBAEnumerator(GMLAN_Enumerator):
method execute (line 587) | def execute(self, socket, state, **kwargs):
method __init__ (line 593) | def __init__(self):
method _get_initial_requests (line 607) | def _get_initial_requests(self, **kwargs):
method post_execute (line 622) | def post_execute(self, socket, state, global_configuration):
method show (line 684) | def show(self, dump=False, filtered=True, verbose=False):
method _get_table_entry_y (line 706) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 710) | def _get_table_entry_z(self, tup):
class GMLAN_TDEnumerator (line 715) | class GMLAN_TDEnumerator(GMLAN_Enumerator):
method _get_initial_requests (line 718) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 728) | def _get_table_entry_y(self, tup):
class GMLAN_DCEnumerator (line 733) | class GMLAN_DCEnumerator(GMLAN_Enumerator):
method _get_initial_requests (line 736) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 741) | def _get_table_entry_y(self, tup):
class GMLAN_Scanner (line 749) | class GMLAN_Scanner(AutomotiveTestCaseExecutor):
method default_test_case_clss (line 751) | def default_test_case_clss(self):
FILE: scapy/contrib/automotive/gm/gmlanutils.py
function _check_response (line 44) | def _check_response(resp):
class GMLAN_TesterPresentSender (line 53) | class GMLAN_TesterPresentSender(PeriodicSenderThread):
method __init__ (line 55) | def __init__(self, sock, pkt=GMLAN(service="TesterPresent"), interval=2):
method run (line 65) | def run(self):
function GMLAN_InitDiagnostics (line 75) | def GMLAN_InitDiagnostics(
function GMLAN_GetSecurityAccess (line 140) | def GMLAN_GetSecurityAccess(
function GMLAN_RequestDownload (line 206) | def GMLAN_RequestDownload(sock, length, timeout=None, retry=0):
function GMLAN_TransferData (line 232) | def GMLAN_TransferData(
function GMLAN_TransferPayload (line 290) | def GMLAN_TransferPayload(
function GMLAN_ReadMemoryByAddress (line 319) | def GMLAN_ReadMemoryByAddress(
function GMLAN_BroadcastSocket (line 363) | def GMLAN_BroadcastSocket(interface):
FILE: scapy/contrib/automotive/kwp.py
class KWP (line 49) | class KWP(ISOTP):
method answers (line 111) | def answers(self, other):
method hashret (line 125) | def hashret(self):
class KWP_SDS (line 134) | class KWP_SDS(Packet):
class KWP_SDSPR (line 150) | class KWP_SDSPR(Packet):
method answers (line 157) | def answers(self, other):
class KWP_ER (line 167) | class KWP_ER(Packet):
class KWP_ERPR (line 181) | class KWP_ERPR(Packet):
method answers (line 184) | def answers(self, other):
class KWP_SA (line 193) | class KWP_SA(Packet):
class KWP_SAPR (line 205) | class KWP_SAPR(Packet):
method answers (line 213) | def answers(self, other):
class KWP_IOCBLI (line 223) | class KWP_IOCBLI(Packet):
class KWP_IOCBLIPR (line 244) | class KWP_IOCBLIPR(Packet):
method answers (line 253) | def answers(self, other):
class KWP_DNMT (line 263) | class KWP_DNMT(Packet):
class KWP_DNMTPR (line 277) | class KWP_DNMTPR(Packet):
method answers (line 280) | def answers(self, other):
class KWP_ENMT (line 289) | class KWP_ENMT(Packet):
class KWP_ENMTPR (line 303) | class KWP_ENMTPR(Packet):
method answers (line 306) | def answers(self, other):
class KWP_TP (line 315) | class KWP_TP(Packet):
class KWP_TPPR (line 329) | class KWP_TPPR(Packet):
method answers (line 332) | def answers(self, other):
class KWP_CDTCS (line 341) | class KWP_CDTCS(Packet):
class KWP_CDTCSPR (line 369) | class KWP_CDTCSPR(Packet):
method answers (line 372) | def answers(self, other):
class KWP_ROE (line 381) | class KWP_ROE(Packet):
class KWP_ROEPR (line 415) | class KWP_ROEPR(Packet):
method answers (line 424) | def answers(self, other):
class KWP_RDBLI (line 434) | class KWP_RDBLI(Packet):
class KWP_RDBLIPR (line 458) | class KWP_RDBLIPR(Packet):
method answers (line 464) | def answers(self, other):
class KWP_WDBLI (line 474) | class KWP_WDBLI(Packet):
class KWP_WDBLIPR (line 484) | class KWP_WDBLIPR(Packet):
method answers (line 490) | def answers(self, other):
class KWP_RDBI (line 500) | class KWP_RDBI(Packet):
class KWP_RDBIPR (line 511) | class KWP_RDBIPR(Packet):
method answers (line 517) | def answers(self, other):
class KWP_RMBA (line 527) | class KWP_RMBA(Packet):
class KWP_RMBAPR (line 538) | class KWP_RMBAPR(Packet):
method answers (line 544) | def answers(self, other):
class KWP_DDLI (line 555) | class KWP_DDLI(Packet):
class KWP_DDLIPR (line 571) | class KWP_DDLIPR(Packet):
method answers (line 577) | def answers(self, other):
class KWP_WDBI (line 587) | class KWP_WDBI(Packet):
class KWP_WDBIPR (line 597) | class KWP_WDBIPR(Packet):
method answers (line 603) | def answers(self, other):
class KWP_WMBA (line 613) | class KWP_WMBA(Packet):
class KWP_WMBAPR (line 625) | class KWP_WMBAPR(Packet):
method answers (line 631) | def answers(self, other):
class KWP_CDI (line 641) | class KWP_CDI(Packet):
class KWP_CDIPR (line 658) | class KWP_CDIPR(Packet):
method answers (line 665) | def answers(self, other):
class KWP_RSODTC (line 675) | class KWP_RSODTC(Packet):
class KWP_RSODTCPR (line 685) | class KWP_RSODTCPR(Packet):
method answers (line 692) | def answers(self, other):
class KWP_RECUI (line 701) | class KWP_RECUI(Packet):
class KWP_RECUIPR (line 726) | class KWP_RECUIPR(Packet):
method answers (line 733) | def answers(self, other):
class KWP_SRBLI (line 743) | class KWP_SRBLI(Packet):
class KWP_SRBLIPR (line 765) | class KWP_SRBLIPR(Packet):
method answers (line 772) | def answers(self, other):
class KWP_STRBLI (line 782) | class KWP_STRBLI(Packet):
class KWP_STRBLIPR (line 793) | class KWP_STRBLIPR(Packet):
method answers (line 800) | def answers(self, other):
class KWP_RRRBLI (line 810) | class KWP_RRRBLI(Packet):
class KWP_RRRBLIPR (line 821) | class KWP_RRRBLIPR(Packet):
method answers (line 828) | def answers(self, other):
class KWP_RD (line 838) | class KWP_RD(Packet):
class KWP_RDPR (line 851) | class KWP_RDPR(Packet):
method answers (line 857) | def answers(self, other):
class KWP_RU (line 866) | class KWP_RU(Packet):
class KWP_RUPR (line 879) | class KWP_RUPR(Packet):
method answers (line 885) | def answers(self, other):
class KWP_TD (line 894) | class KWP_TD(Packet):
class KWP_TDPR (line 905) | class KWP_TDPR(Packet):
method answers (line 912) | def answers(self, other):
class KWP_RTE (line 922) | class KWP_RTE(Packet):
class KWP_RTEPR (line 932) | class KWP_RTEPR(Packet):
method answers (line 938) | def answers(self, other):
class KWP_NR (line 947) | class KWP_NR(Packet):
method answers (line 978) | def answers(self, other):
class KWP_TesterPresentSender (line 992) | class KWP_TesterPresentSender(PeriodicSenderThread):
method __init__ (line 993) | def __init__(self, sock, pkt=KWP() / KWP_TP(responseRequired=0x02),
method run (line 1004) | def run(self):
FILE: scapy/contrib/automotive/obd/iid/iids.py
class OBD_S09_PR_Record (line 20) | class OBD_S09_PR_Record(Packet):
class OBD_S09_PR (line 26) | class OBD_S09_PR(Packet):
method answers (line 32) | def answers(self, other):
class OBD_IID00 (line 37) | class OBD_IID00(OBD_Packet):
class _OBD_IID_MessageCount (line 77) | class _OBD_IID_MessageCount(OBD_Packet):
class OBD_IID01 (line 83) | class OBD_IID01(_OBD_IID_MessageCount):
class OBD_IID03 (line 87) | class OBD_IID03(_OBD_IID_MessageCount):
class OBD_IID05 (line 91) | class OBD_IID05(_OBD_IID_MessageCount):
class OBD_IID07 (line 95) | class OBD_IID07(_OBD_IID_MessageCount):
class OBD_IID09 (line 99) | class OBD_IID09(_OBD_IID_MessageCount):
class OBD_IID02 (line 103) | class OBD_IID02(OBD_Packet):
class OBD_IID04 (line 114) | class OBD_IID04(OBD_Packet):
class OBD_IID06 (line 125) | class OBD_IID06(OBD_Packet):
class OBD_IID08 (line 136) | class OBD_IID08(OBD_Packet):
class OBD_IID0A (line 146) | class OBD_IID0A(OBD_Packet):
class OBD_IID0B (line 156) | class OBD_IID0B(OBD_Packet):
FILE: scapy/contrib/automotive/obd/mid/mids.py
function _unit_and_scaling_fields (line 16) | def _unit_and_scaling_fields(name):
function _mid_flags (line 181) | def _mid_flags(basemid):
class OBD_MIDXX (line 218) | class OBD_MIDXX(OBD_Packet):
class OBD_MID00 (line 325) | class OBD_MID00(OBD_Packet):
class OBD_MID20 (line 331) | class OBD_MID20(OBD_Packet):
class OBD_MID40 (line 337) | class OBD_MID40(OBD_Packet):
class OBD_MID60 (line 343) | class OBD_MID60(OBD_Packet):
class OBD_MID80 (line 349) | class OBD_MID80(OBD_Packet):
class OBD_MIDA0 (line 355) | class OBD_MIDA0(OBD_Packet):
class OBD_S06_PR_Record (line 361) | class OBD_S06_PR_Record(Packet):
class OBD_S06_PR (line 457) | class OBD_S06_PR(Packet):
method answers (line 463) | def answers(self, other):
FILE: scapy/contrib/automotive/obd/obd.py
class OBD (line 34) | class OBD(ISOTP):
method hashret (line 64) | def hashret(self):
method answers (line 69) | def answers(self, other):
FILE: scapy/contrib/automotive/obd/packet.py
class OBD_Packet (line 12) | class OBD_Packet(Packet):
method extract_padding (line 13) | def extract_padding(self, s):
FILE: scapy/contrib/automotive/obd/pid/pids.py
class OBD_S01_PR_Record (line 21) | class OBD_S01_PR_Record(Packet):
class OBD_S01_PR (line 27) | class OBD_S01_PR(Packet):
method answers (line 33) | def answers(self, other):
class OBD_S02_PR_Record (line 38) | class OBD_S02_PR_Record(Packet):
class OBD_S02_PR (line 45) | class OBD_S02_PR(Packet):
method answers (line 51) | def answers(self, other):
FILE: scapy/contrib/automotive/obd/pid/pids_00_1F.py
class OBD_PID00 (line 18) | class OBD_PID00(OBD_Packet):
class OBD_PID01 (line 59) | class OBD_PID01(OBD_Packet):
class OBD_PID02 (line 109) | class OBD_PID02(OBD_Packet):
class OBD_PID03 (line 116) | class OBD_PID03(OBD_Packet):
class OBD_PID04 (line 133) | class OBD_PID04(OBD_Packet):
class OBD_PID05 (line 140) | class OBD_PID05(OBD_Packet):
class OBD_PID06 (line 147) | class OBD_PID06(OBD_Packet):
class OBD_PID07 (line 155) | class OBD_PID07(OBD_Packet):
class OBD_PID08 (line 163) | class OBD_PID08(OBD_Packet):
class OBD_PID09 (line 171) | class OBD_PID09(OBD_Packet):
class OBD_PID0A (line 179) | class OBD_PID0A(OBD_Packet):
class OBD_PID0B (line 186) | class OBD_PID0B(OBD_Packet):
class OBD_PID0C (line 193) | class OBD_PID0C(OBD_Packet):
class OBD_PID0D (line 200) | class OBD_PID0D(OBD_Packet):
class OBD_PID0E (line 207) | class OBD_PID0E(OBD_Packet):
class OBD_PID0F (line 214) | class OBD_PID0F(OBD_Packet):
class OBD_PID10 (line 221) | class OBD_PID10(OBD_Packet):
class OBD_PID11 (line 228) | class OBD_PID11(OBD_Packet):
class OBD_PID12 (line 235) | class OBD_PID12(OBD_Packet):
class OBD_PID13 (line 250) | class OBD_PID13(OBD_Packet):
class _OBD_PID14_1B (line 266) | class _OBD_PID14_1B(OBD_Packet):
class OBD_PID14 (line 274) | class OBD_PID14(_OBD_PID14_1B):
class OBD_PID15 (line 278) | class OBD_PID15(_OBD_PID14_1B):
class OBD_PID16 (line 282) | class OBD_PID16(_OBD_PID14_1B):
class OBD_PID17 (line 286) | class OBD_PID17(_OBD_PID14_1B):
class OBD_PID18 (line 290) | class OBD_PID18(_OBD_PID14_1B):
class OBD_PID19 (line 294) | class OBD_PID19(_OBD_PID14_1B):
class OBD_PID1A (line 298) | class OBD_PID1A(_OBD_PID14_1B):
class OBD_PID1B (line 302) | class OBD_PID1B(_OBD_PID14_1B):
class OBD_PID1C (line 306) | class OBD_PID1C(OBD_Packet):
class OBD_PID1D (line 350) | class OBD_PID1D(OBD_Packet):
class OBD_PID1E (line 366) | class OBD_PID1E(OBD_Packet):
class OBD_PID1F (line 374) | class OBD_PID1F(OBD_Packet):
FILE: scapy/contrib/automotive/obd/pid/pids_20_3F.py
class OBD_PID20 (line 17) | class OBD_PID20(OBD_Packet):
class OBD_PID21 (line 57) | class OBD_PID21(OBD_Packet):
class OBD_PID22 (line 64) | class OBD_PID22(OBD_Packet):
class OBD_PID23 (line 71) | class OBD_PID23(OBD_Packet):
class _OBD_PID24_2B (line 78) | class _OBD_PID24_2B(OBD_Packet):
class OBD_PID24 (line 85) | class OBD_PID24(_OBD_PID24_2B):
class OBD_PID25 (line 89) | class OBD_PID25(_OBD_PID24_2B):
class OBD_PID26 (line 93) | class OBD_PID26(_OBD_PID24_2B):
class OBD_PID27 (line 97) | class OBD_PID27(_OBD_PID24_2B):
class OBD_PID28 (line 101) | class OBD_PID28(_OBD_PID24_2B):
class OBD_PID29 (line 105) | class OBD_PID29(_OBD_PID24_2B):
class OBD_PID2A (line 109) | class OBD_PID2A(_OBD_PID24_2B):
class OBD_PID2B (line 113) | class OBD_PID2B(_OBD_PID24_2B):
class OBD_PID2C (line 117) | class OBD_PID2C(OBD_Packet):
class OBD_PID2D (line 124) | class OBD_PID2D(OBD_Packet):
class OBD_PID2E (line 132) | class OBD_PID2E(OBD_Packet):
class OBD_PID2F (line 139) | class OBD_PID2F(OBD_Packet):
class OBD_PID30 (line 146) | class OBD_PID30(OBD_Packet):
class OBD_PID31 (line 153) | class OBD_PID31(OBD_Packet):
class OBD_PID32 (line 160) | class OBD_PID32(OBD_Packet):
class OBD_PID33 (line 167) | class OBD_PID33(OBD_Packet):
class _OBD_PID34_3B (line 174) | class _OBD_PID34_3B(OBD_Packet):
class OBD_PID34 (line 181) | class OBD_PID34(_OBD_PID34_3B):
class OBD_PID35 (line 185) | class OBD_PID35(_OBD_PID34_3B):
class OBD_PID36 (line 189) | class OBD_PID36(_OBD_PID34_3B):
class OBD_PID37 (line 193) | class OBD_PID37(_OBD_PID34_3B):
class OBD_PID38 (line 197) | class OBD_PID38(_OBD_PID34_3B):
class OBD_PID39 (line 201) | class OBD_PID39(_OBD_PID34_3B):
class OBD_PID3A (line 205) | class OBD_PID3A(_OBD_PID34_3B):
class OBD_PID3B (line 209) | class OBD_PID3B(_OBD_PID34_3B):
class OBD_PID3C (line 213) | class OBD_PID3C(OBD_Packet):
class OBD_PID3D (line 221) | class OBD_PID3D(OBD_Packet):
class OBD_PID3E (line 229) | class OBD_PID3E(OBD_Packet):
class OBD_PID3F (line 237) | class OBD_PID3F(OBD_Packet):
FILE: scapy/contrib/automotive/obd/pid/pids_40_5F.py
class OBD_PID40 (line 18) | class OBD_PID40(OBD_Packet):
class OBD_PID41 (line 58) | class OBD_PID41(OBD_Packet):
class OBD_PID42 (line 106) | class OBD_PID42(OBD_Packet):
class OBD_PID43 (line 113) | class OBD_PID43(OBD_Packet):
class OBD_PID44 (line 120) | class OBD_PID44(OBD_Packet):
class _OBD_PercentPacket (line 127) | class _OBD_PercentPacket(OBD_Packet):
class OBD_PID45 (line 133) | class OBD_PID45(_OBD_PercentPacket):
class OBD_PID46 (line 137) | class OBD_PID46(OBD_Packet):
class OBD_PID47 (line 144) | class OBD_PID47(_OBD_PercentPacket):
class OBD_PID48 (line 148) | class OBD_PID48(_OBD_PercentPacket):
class OBD_PID49 (line 152) | class OBD_PID49(_OBD_PercentPacket):
class OBD_PID4A (line 156) | class OBD_PID4A(_OBD_PercentPacket):
class OBD_PID4B (line 160) | class OBD_PID4B(_OBD_PercentPacket):
class OBD_PID4C (line 164) | class OBD_PID4C(_OBD_PercentPacket):
class OBD_PID4D (line 168) | class OBD_PID4D(OBD_Packet):
class OBD_PID4E (line 175) | class OBD_PID4E(OBD_Packet):
class OBD_PID4F (line 182) | class OBD_PID4F(OBD_Packet):
class OBD_PID50 (line 193) | class OBD_PID50(OBD_Packet):
class OBD_PID51 (line 201) | class OBD_PID51(OBD_Packet):
class OBD_PID52 (line 235) | class OBD_PID52(_OBD_PercentPacket):
class OBD_PID53 (line 239) | class OBD_PID53(OBD_Packet):
class OBD_PID54 (line 246) | class OBD_PID54(OBD_Packet):
class _OBD_SensorTrimPacket1 (line 253) | class _OBD_SensorTrimPacket1(OBD_Packet):
class _OBD_SensorTrimPacket2 (line 262) | class _OBD_SensorTrimPacket2(OBD_Packet):
class OBD_PID55 (line 271) | class OBD_PID55(_OBD_SensorTrimPacket1):
class OBD_PID56 (line 275) | class OBD_PID56(_OBD_SensorTrimPacket1):
class OBD_PID57 (line 279) | class OBD_PID57(_OBD_SensorTrimPacket2):
class OBD_PID58 (line 283) | class OBD_PID58(_OBD_SensorTrimPacket2):
class OBD_PID59 (line 287) | class OBD_PID59(OBD_Packet):
class OBD_PID5A (line 294) | class OBD_PID5A(_OBD_PercentPacket):
class OBD_PID5B (line 298) | class OBD_PID5B(_OBD_PercentPacket):
class OBD_PID5C (line 302) | class OBD_PID5C(OBD_Packet):
class OBD_PID5D (line 309) | class OBD_PID5D(OBD_Packet):
class OBD_PID5E (line 317) | class OBD_PID5E(OBD_Packet):
class OBD_PID5F (line 324) | class OBD_PID5F(OBD_Packet):
FILE: scapy/contrib/automotive/obd/pid/pids_60_7F.py
class OBD_PID60 (line 17) | class OBD_PID60(OBD_Packet):
class OBD_PID61 (line 57) | class OBD_PID61(OBD_Packet):
class OBD_PID62 (line 64) | class OBD_PID62(OBD_Packet):
class OBD_PID63 (line 71) | class OBD_PID63(OBD_Packet):
class OBD_PID64 (line 78) | class OBD_PID64(OBD_Packet):
class OBD_PID65 (line 89) | class OBD_PID65(OBD_Packet):
class OBD_PID66 (line 106) | class OBD_PID66(OBD_Packet):
class OBD_PID67 (line 117) | class OBD_PID67(OBD_Packet):
class OBD_PID68 (line 128) | class OBD_PID68(OBD_Packet):
class OBD_PID69 (line 147) | class OBD_PID69(OBD_Packet):
class OBD_PID6A (line 172) | class OBD_PID6A(OBD_Packet):
class OBD_PID6B (line 192) | class OBD_PID6B(OBD_Packet):
class OBD_PID6C (line 207) | class OBD_PID6C(OBD_Packet):
class OBD_PID6D (line 226) | class OBD_PID6D(OBD_Packet):
class OBD_PID6E (line 241) | class OBD_PID6E(OBD_Packet):
class OBD_PID6F (line 254) | class OBD_PID6F(OBD_Packet):
class OBD_PID70 (line 265) | class OBD_PID70(OBD_Packet):
class OBD_PID71 (line 284) | class OBD_PID71(OBD_Packet):
class OBD_PID72 (line 303) | class OBD_PID72(OBD_Packet):
class OBD_PID73 (line 322) | class OBD_PID73(OBD_Packet):
class OBD_PID74 (line 333) | class OBD_PID74(OBD_Packet):
class OBD_PID75 (line 344) | class OBD_PID75(OBD_Packet):
class OBD_PID76 (line 365) | class OBD_PID76(OBD_Packet):
class OBD_PID77 (line 386) | class OBD_PID77(OBD_Packet):
class _OBD_PID_ExhaustGasTemperatureBank (line 401) | class _OBD_PID_ExhaustGasTemperatureBank(OBD_Packet):
class OBD_PID78 (line 419) | class OBD_PID78(_OBD_PID_ExhaustGasTemperatureBank):
class OBD_PID79 (line 423) | class OBD_PID79(_OBD_PID_ExhaustGasTemperatureBank):
class _OBD_PID_DieselParticulateFilter (line 427) | class _OBD_PID_DieselParticulateFilter(OBD_Packet):
class OBD_PID7A (line 442) | class OBD_PID7A(_OBD_PID_DieselParticulateFilter):
class OBD_PID7B (line 446) | class OBD_PID7B(_OBD_PID_DieselParticulateFilter):
class OBD_PID7C (line 450) | class OBD_PID7C(OBD_Packet):
class OBD_PID7D (line 469) | class OBD_PID7D(OBD_Packet):
class OBD_PID7E (line 480) | class OBD_PID7E(OBD_Packet):
class OBD_PID7F (line 491) | class OBD_PID7F(OBD_Packet):
FILE: scapy/contrib/automotive/obd/pid/pids_80_9F.py
class OBD_PID80 (line 16) | class OBD_PID80(OBD_Packet):
class OBD_PID81 (line 56) | class OBD_PID81(OBD_Packet):
class OBD_PID82 (line 78) | class OBD_PID82(OBD_Packet):
class OBD_PID83 (line 100) | class OBD_PID83(OBD_Packet):
class OBD_PID84 (line 113) | class OBD_PID84(OBD_Packet):
class OBD_PID85 (line 120) | class OBD_PID85(OBD_Packet):
class OBD_PID86 (line 127) | class OBD_PID86(OBD_Packet):
class OBD_PID87 (line 134) | class OBD_PID87(OBD_Packet):
class OBD_PID88 (line 141) | class OBD_PID88(OBD_Packet):
class OBD_PID89 (line 148) | class OBD_PID89(OBD_Packet):
class OBD_PID8A (line 156) | class OBD_PID8A(OBD_Packet):
class OBD_PID8B (line 164) | class OBD_PID8B(OBD_Packet):
class OBD_PID8C (line 171) | class OBD_PID8C(OBD_Packet):
class OBD_PID8D (line 178) | class OBD_PID8D(OBD_Packet):
class OBD_PID8E (line 185) | class OBD_PID8E(OBD_Packet):
class OBD_PID8F (line 192) | class OBD_PID8F(OBD_Packet):
class OBD_PID90 (line 199) | class OBD_PID90(OBD_Packet):
class OBD_PID91 (line 206) | class OBD_PID91(OBD_Packet):
class OBD_PID92 (line 213) | class OBD_PID92(OBD_Packet):
class OBD_PID93 (line 220) | class OBD_PID93(OBD_Packet):
class OBD_PID94 (line 227) | class OBD_PID94(OBD_Packet):
class OBD_PID98 (line 234) | class OBD_PID98(OBD_Packet):
class OBD_PID99 (line 241) | class OBD_PID99(OBD_Packet):
class OBD_PID9A (line 248) | class OBD_PID9A(OBD_Packet):
class OBD_PID9B (line 255) | class OBD_PID9B(OBD_Packet):
class OBD_PID9C (line 262) | class OBD_PID9C(OBD_Packet):
class OBD_PID9D (line 269) | class OBD_PID9D(OBD_Packet):
class OBD_PID9E (line 276) | class OBD_PID9E(OBD_Packet):
class OBD_PID9F (line 283) | class OBD_PID9F(OBD_Packet):
FILE: scapy/contrib/automotive/obd/pid/pids_A0_C0.py
class OBD_PIDA0 (line 16) | class OBD_PIDA0(OBD_Packet):
class OBD_PIDA1 (line 56) | class OBD_PIDA1(OBD_Packet):
class OBD_PIDA2 (line 63) | class OBD_PIDA2(OBD_Packet):
class OBD_PIDA3 (line 70) | class OBD_PIDA3(OBD_Packet):
class OBD_PIDA4 (line 77) | class OBD_PIDA4(OBD_Packet):
class OBD_PIDA5 (line 84) | class OBD_PIDA5(OBD_Packet):
class OBD_PIDA6 (line 91) | class OBD_PIDA6(OBD_Packet):
class OBD_PIDC0 (line 98) | class OBD_PIDC0(OBD_Packet):
FILE: scapy/contrib/automotive/obd/scanner.py
class OBD_Enumerator (line 36) | class OBD_Enumerator(ServiceEnumerator):
method _get_negative_response_code (line 49) | def _get_negative_response_code(resp):
method _get_negative_response_desc (line 54) | def _get_negative_response_desc(nrc):
method _get_negative_response_label (line 59) | def _get_negative_response_label(response):
method filtered_results (line 64) | def filtered_results(self):
class OBD_Service_Enumerator (line 69) | class OBD_Service_Enumerator(OBD_Enumerator):
method get_supported (line 74) | def get_supported(self, socket, state, **kwargs):
method execute (line 91) | def execute(self, socket, state, **kwargs):
method print_payload (line 105) | def print_payload(resp):
method _get_table_entry_z (line 113) | def _get_table_entry_z(self, tup):
class OBD_DTC_Enumerator (line 118) | class OBD_DTC_Enumerator(OBD_Enumerator):
method print_payload (line 120) | def print_payload(resp):
class OBD_S03_Enumerator (line 129) | class OBD_S03_Enumerator(OBD_DTC_Enumerator):
method _get_initial_requests (line 132) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 136) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 140) | def _get_table_entry_y(self, tup):
class OBD_S07_Enumerator (line 149) | class OBD_S07_Enumerator(OBD_DTC_Enumerator):
method _get_initial_requests (line 152) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 156) | def _get_table_entry_x(self, tup):
class OBD_S0A_Enumerator (line 161) | class OBD_S0A_Enumerator(OBD_DTC_Enumerator):
method _get_initial_requests (line 164) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 168) | def _get_table_entry_x(self, tup):
class OBD_S01_Enumerator (line 173) | class OBD_S01_Enumerator(OBD_Service_Enumerator):
method _get_initial_requests (line 178) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 183) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 187) | def _get_table_entry_y(self, tup):
class OBD_S02_Enumerator (line 197) | class OBD_S02_Enumerator(OBD_Service_Enumerator):
method _get_initial_requests (line 200) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 206) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 210) | def _get_table_entry_y(self, tup):
class OBD_S06_Enumerator (line 220) | class OBD_S06_Enumerator(OBD_Service_Enumerator):
method _get_initial_requests (line 223) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 228) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 232) | def _get_table_entry_y(self, tup):
class OBD_S08_Enumerator (line 245) | class OBD_S08_Enumerator(OBD_Service_Enumerator):
method _get_initial_requests (line 248) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 253) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 257) | def _get_table_entry_y(self, tup):
class OBD_S09_Enumerator (line 267) | class OBD_S09_Enumerator(OBD_Service_Enumerator):
method _get_initial_requests (line 270) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_x (line 275) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 279) | def _get_table_entry_y(self, tup):
class OBD_Scanner (line 290) | class OBD_Scanner(AutomotiveTestCaseExecutor):
method enumerators (line 292) | def enumerators(self):
method default_test_case_clss (line 297) | def default_test_case_clss(self):
FILE: scapy/contrib/automotive/obd/services.py
class OBD_DTC (line 16) | class OBD_DTC(OBD_Packet):
class OBD_NR (line 35) | class OBD_NR(Packet):
method answers (line 52) | def answers(self, other):
class OBD_S01 (line 58) | class OBD_S01(Packet):
class OBD_S02_Record (line 65) | class OBD_S02_Record(OBD_Packet):
class OBD_S02 (line 72) | class OBD_S02(Packet):
class OBD_S03 (line 79) | class OBD_S03(Packet):
class OBD_S03_PR (line 83) | class OBD_S03_PR(Packet):
method answers (line 90) | def answers(self, other):
class OBD_S04 (line 94) | class OBD_S04(Packet):
class OBD_S04_PR (line 98) | class OBD_S04_PR(Packet):
method answers (line 101) | def answers(self, other):
class OBD_S06 (line 105) | class OBD_S06(Packet):
class OBD_S07 (line 112) | class OBD_S07(Packet):
class OBD_S07_PR (line 116) | class OBD_S07_PR(Packet):
method answers (line 123) | def answers(self, other):
class OBD_S08 (line 127) | class OBD_S08(Packet):
class OBD_S09 (line 134) | class OBD_S09(Packet):
class OBD_S0A (line 141) | class OBD_S0A(Packet):
class OBD_S0A_PR (line 145) | class OBD_S0A_PR(Packet):
method answers (line 152) | def answers(self, other):
FILE: scapy/contrib/automotive/obd/tid/tids.py
class _OBD_TID_Voltage (line 15) | class _OBD_TID_Voltage(OBD_Packet):
class _OBD_TID_Time (line 25) | class _OBD_TID_Time(OBD_Packet):
class _OBD_TID_Period (line 35) | class _OBD_TID_Period(OBD_Packet):
class OBD_TID00 (line 45) | class OBD_TID00(OBD_Packet):
class OBD_TID01 (line 85) | class OBD_TID01(_OBD_TID_Voltage):
class OBD_TID02 (line 89) | class OBD_TID02(_OBD_TID_Voltage):
class OBD_TID03 (line 93) | class OBD_TID03(_OBD_TID_Voltage):
class OBD_TID04 (line 97) | class OBD_TID04(_OBD_TID_Voltage):
class OBD_TID05 (line 101) | class OBD_TID05(_OBD_TID_Time):
class OBD_TID06 (line 105) | class OBD_TID06(_OBD_TID_Time):
class OBD_TID07 (line 109) | class OBD_TID07(_OBD_TID_Voltage):
class OBD_TID08 (line 113) | class OBD_TID08(_OBD_TID_Voltage):
class OBD_TID09 (line 117) | class OBD_TID09(_OBD_TID_Period):
class OBD_TID0A (line 121) | class OBD_TID0A(_OBD_TID_Period):
class OBD_S08_PR_Record (line 125) | class OBD_S08_PR_Record(Packet):
class OBD_S08_PR (line 132) | class OBD_S08_PR(Packet):
method answers (line 138) | def answers(self, other):
FILE: scapy/contrib/automotive/scanner/configuration.py
class AutomotiveTestCaseExecutorConfiguration (line 28) | class AutomotiveTestCaseExecutorConfiguration(object):
method __setitem__ (line 55) | def __setitem__(self, key, value):
method __getitem__ (line 59) | def __getitem__(self, key):
method _generate_test_case_config (line 63) | def _generate_test_case_config(self, test_case_cls):
method add_test_case (line 84) | def add_test_case(self, test_case):
method __init__ (line 113) | def __init__(self, test_cases, **kwargs):
method __reduce__ (line 134) | def __reduce__(self): # type: ignore
FILE: scapy/contrib/automotive/scanner/enumerator.py
class ServiceEnumerator (line 62) | class ServiceEnumerator(AutomotiveTestCase, metaclass=abc.ABCMeta):
method __init__ (line 131) | def __init__(self):
method _get_negative_response_code (line 144) | def _get_negative_response_code(resp):
method _get_negative_response_desc (line 150) | def _get_negative_response_desc(nrc):
method _get_table_entry_x (line 154) | def _get_table_entry_x(self, tup):
method _get_table_entry_y (line 163) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 172) | def _get_table_entry_z(self, tup):
method _get_negative_response_label (line 183) | def _get_negative_response_label(response):
method _get_initial_requests (line 188) | def _get_initial_requests(self, **kwargs):
method __reduce__ (line 192) | def __reduce__(self): # type: ignore
method negative_response_blacklist (line 214) | def negative_response_blacklist(self):
method completed (line 219) | def completed(self):
method _store_result (line 226) | def _store_result(self, state, req, res):
method _get_retry_iterator (line 241) | def _get_retry_iterator(self, state):
method _get_initial_request_iterator (line 256) | def _get_initial_request_iterator(self, state, **kwargs):
method _get_request_iterator (line 264) | def _get_request_iterator(self, state, **kwargs):
method _prepare_runtime_estimation (line 269) | def _prepare_runtime_estimation(self, **kwargs):
method runtime_estimation (line 278) | def runtime_estimation(self):
method pre_execute (line 289) | def pre_execute(self, socket, state, global_configuration):
method post_execute (line 296) | def post_execute(self, socket, state, global_configuration):
method execute (line 300) | def execute(self, socket, state, **kwargs):
method sr1_with_retry_on_error (line 381) | def sr1_with_retry_on_error(self, req, socket, state, timeout):
method _evaluate_response (line 393) | def _evaluate_response(self,
method _evaluate_ecu_state_modifications (line 436) | def _evaluate_ecu_state_modifications(self,
method _evaluate_negative_response_code (line 449) | def _evaluate_negative_response_code(self,
method _populate_retry (line 477) | def _populate_retry(self,
method _evaluate_retry (line 502) | def _evaluate_retry(self,
method _compute_statistics (line 519) | def _compute_statistics(self):
method _show_statistics (line 570) | def _show_statistics(self, **kwargs):
method _prepare_negative_response_blacklist (line 585) | def _prepare_negative_response_blacklist(self):
method results (line 603) | def results(self):
method results_with_response (line 608) | def results_with_response(self):
method filtered_results (line 621) | def filtered_results(self):
method scanned_states (line 632) | def scanned_states(self):
method results_with_negative_response (line 641) | def results_with_negative_response(self):
method results_with_positive_response (line 651) | def results_with_positive_response(self):
method results_without_response (line 661) | def results_without_response(self):
method _show_negative_response_details (line 669) | def _show_negative_response_details(self, **kwargs):
method _show_negative_response_information (line 684) | def _show_negative_response_information(self, **kwargs):
method _show_results_information (line 700) | def _show_results_information(self, **kwargs):
method show (line 719) | def show(self, dump=False, filtered=True, verbose=False):
method _get_label (line 740) | def _get_label(self, response, positive_case="PR: PositiveResponse"):
method supported_responses (line 756) | def supported_responses(self):
class StateGeneratingServiceEnumerator (line 768) | class StateGeneratingServiceEnumerator(
method __init__ (line 773) | def __init__(self):
method get_new_edge (line 783) | def get_new_edge(self,
method transition_function (line 814) | def transition_function(
method get_transition_function_description (line 843) | def get_transition_function_description(self, edge):
method get_transition_function_kwargs (line 847) | def get_transition_function_kwargs(self, edge):
method get_transition_function (line 856) | def get_transition_function(self, socket, edge):
FILE: scapy/contrib/automotive/scanner/executor.py
class AutomotiveTestCaseExecutor (line 42) | class AutomotiveTestCaseExecutor(metaclass=abc.ABCMeta):
method _initial_ecu_state (line 60) | def _initial_ecu_state(self):
method __init__ (line 64) | def __init__(
method __reduce__ (line 93) | def __reduce__(self): # type: ignore
method default_test_case_clss (line 111) | def default_test_case_clss(self):
method state_graph (line 116) | def state_graph(self):
method state_paths (line 121) | def state_paths(self):
method final_states (line 136) | def final_states(self):
method scan_completed (line 146) | def scan_completed(self):
method reset_target (line 151) | def reset_target(self):
method reconnect (line 163) | def reconnect(self):
method execute_test_case (line 184) | def execute_test_case(self, test_case, kill_time=None):
method check_new_testcases (line 235) | def check_new_testcases(self, test_case):
method check_new_states (line 243) | def check_new_states(self, test_case):
method validate_test_case_kwargs (line 256) | def validate_test_case_kwargs(self):
method stop_scan (line 263) | def stop_scan(self):
method progress (line 268) | def progress(self):
method scan (line 281) | def scan(self, timeout=None):
method enter_state_path (line 352) | def enter_state_path(self, path):
method enter_state (line 384) | def enter_state(self, prev_state, next_state):
method cleanup_state (line 432) | def cleanup_state(self):
method show_testcases (line 450) | def show_testcases(self):
method show_testcases_status (line 455) | def show_testcases_status(self):
method get_test_cases_by_class (line 463) | def get_test_cases_by_class(self, cls):
method supported_responses (line 468) | def supported_responses(self):
FILE: scapy/contrib/automotive/scanner/graph.py
class Graph (line 31) | class Graph(object):
method __init__ (line 44) | def __init__(self):
method add_edge (line 50) | def add_edge(self, edge, transition_function=None):
method get_transition_tuple_for_edge (line 64) | def get_transition_tuple_for_edge(self, edge):
method downrate_edge (line 73) | def downrate_edge(self, edge):
method transition_functions (line 85) | def transition_functions(self):
method nodes (line 94) | def nodes(self):
method render (line 102) | def render(self, filename="SystemStateGraph.gv", view=True):
method dijkstra (line 134) | def dijkstra(graph, initial, end):
FILE: scapy/contrib/automotive/scanner/staged_test_case.py
class StagedAutomotiveTestCase (line 37) | class StagedAutomotiveTestCase(AutomotiveTestCaseABC, TestCaseGenerator,...
method __init__ (line 73) | def __init__(self,
method __getitem__ (line 84) | def __getitem__(self, item):
method __len__ (line 88) | def __len__(self):
method __reduce__ (line 93) | def __reduce__(self): # type: ignore
method test_cases (line 102) | def test_cases(self):
method current_test_case (line 107) | def current_test_case(self):
method current_connector (line 112) | def current_connector(self):
method previous_test_case (line 120) | def previous_test_case(self):
method get_generated_test_case (line 125) | def get_generated_test_case(self):
method get_new_edge (line 133) | def get_new_edge(self,
method get_transition_function (line 143) | def get_transition_function(self, socket, edge):
method has_completed (line 151) | def has_completed(self, state):
method pre_execute (line 183) | def pre_execute(self,
method execute (line 211) | def execute(self, socket, state, **kwargs):
method post_execute (line 216) | def post_execute(self,
method _show_headline (line 225) | def _show_headline(headline, sep="="):
method show (line 232) | def show(self, dump=False, filtered=True, verbose=False):
method completed (line 247) | def completed(self):
method supported_responses (line 253) | def supported_responses(self):
method runtime_estimation (line 262) | def runtime_estimation(self):
FILE: scapy/contrib/automotive/scanner/test_case.py
class AutomotiveTestCaseABC (line 43) | class AutomotiveTestCaseABC(metaclass=abc.ABCMeta):
method has_completed (line 58) | def has_completed(self, state):
method pre_execute (line 68) | def pre_execute(self,
method execute (line 84) | def execute(self, socket, state, **kwargs):
method post_execute (line 97) | def post_execute(self,
method show (line 113) | def show(self, dump=False, filtered=True, verbose=False):
method completed (line 130) | def completed(self):
method supported_responses (line 140) | def supported_responses(self):
class AutomotiveTestCase (line 149) | class AutomotiveTestCase(AutomotiveTestCaseABC):
method __init__ (line 156) | def __init__(self):
method has_completed (line 160) | def has_completed(self, state):
method check_kwargs (line 165) | def check_kwargs(cls, kwargs):
method completed (line 184) | def completed(self):
method scanned_states (line 189) | def scanned_states(self):
method pre_execute (line 197) | def pre_execute(self, socket, state, global_configuration):
method execute (line 201) | def execute(self, socket, state, **kwargs):
method post_execute (line 205) | def post_execute(self, socket, state, global_configuration):
method _show_header (line 209) | def _show_header(self, **kwargs):
method _show_state_information (line 217) | def _show_state_information(self, **kwargs):
method show (line 225) | def show(self, dump=False, filtered=True, verbose=False):
class TestCaseGenerator (line 240) | class TestCaseGenerator(metaclass=abc.ABCMeta):
method get_generated_test_case (line 242) | def get_generated_test_case(self):
class StateGenerator (line 247) | class StateGenerator(metaclass=abc.ABCMeta):
method get_new_edge (line 250) | def get_new_edge(self, socket, config):
method get_transition_function (line 255) | def get_transition_function(self, socket, edge):
FILE: scapy/contrib/automotive/someip.py
class SOMEIP (line 26) | class SOMEIP(Packet):
method get_payload_cls_by_srv_id (line 130) | def get_payload_cls_by_srv_id(pkt, lst, cur, remain):
method post_build (line 133) | def post_build(self, pkt, pay):
method answers (line 144) | def answers(self, other):
method _is_tp (line 156) | def _is_tp(pkt):
method _is_sd (line 164) | def _is_sd(pkt):
method fragment (line 171) | def fragment(self, fragsize=1392):
function _bind_someip_layers (line 214) | def _bind_someip_layers():
class _SDPacketBase (line 228) | class _SDPacketBase(Packet):
method extract_padding (line 231) | def extract_padding(self, s):
function _MAKE_SDENTRY_COMMON_FIELDS_DESC (line 246) | def _MAKE_SDENTRY_COMMON_FIELDS_DESC(type):
class SDEntry_Service (line 264) | class SDEntry_Service(_SDPacketBase):
class SDEntry_EventGroup (line 273) | class SDEntry_EventGroup(_SDPacketBase):
function _sdentry_class (line 284) | def _sdentry_class(payload, **kargs):
function _sdoption_class (line 297) | def _sdoption_class(payload, **kargs):
function _MAKE_COMMON_SDOPTION_FIELDS_DESC (line 332) | def _MAKE_COMMON_SDOPTION_FIELDS_DESC(type, length=None):
function _MAKE_COMMON_IP_SDOPTION_FIELDS_DESC (line 348) | def _MAKE_COMMON_IP_SDOPTION_FIELDS_DESC():
class SDOption_Config (line 356) | class SDOption_Config(_SDPacketBase):
method post_build (line 362) | def post_build(self, pkt, pay):
method make_string (line 369) | def make_string(data):
class SDOption_LoadBalance (line 398) | class SDOption_LoadBalance(_SDPacketBase):
class SDOption_IP4_EndPoint (line 408) | class SDOption_IP4_EndPoint(_SDPacketBase):
class SDOption_IP4_Multicast (line 417) | class SDOption_IP4_Multicast(_SDPacketBase):
class SDOption_IP4_SD_EndPoint (line 426) | class SDOption_IP4_SD_EndPoint(_SDPacketBase):
class SDOption_IP6_EndPoint (line 435) | class SDOption_IP6_EndPoint(_SDPacketBase):
class SDOption_IP6_Multicast (line 444) | class SDOption_IP6_Multicast(_SDPacketBase):
class SDOption_IP6_SD_EndPoint (line 453) | class SDOption_IP6_SD_EndPoint(_SDPacketBase):
class SD (line 465) | class SD(_SDPacketBase):
method set_entryArray (line 499) | def set_entryArray(self, entry_list):
method set_optionArray (line 505) | def set_optionArray(self, option_list):
FILE: scapy/contrib/automotive/uds.py
class UDS (line 47) | class UDS(ISOTP):
method answers (line 109) | def answers(self, other):
method hashret (line 123) | def hashret(self):
class UDS_DSC (line 131) | class UDS_DSC(Packet):
class UDS_DSCPR (line 148) | class UDS_DSCPR(Packet):
method answers (line 156) | def answers(self, other):
class UDS_ER (line 165) | class UDS_ER(Packet):
class UDS_ERPR (line 184) | class UDS_ERPR(Packet):
method answers (line 192) | def answers(self, other):
class UDS_SA (line 200) | class UDS_SA(Packet):
class UDS_SAPR (line 214) | class UDS_SAPR(Packet):
method answers (line 222) | def answers(self, other):
class UDS_CC (line 231) | class UDS_CC(Packet):
class UDS_CCPR (line 271) | class UDS_CCPR(Packet):
method answers (line 277) | def answers(self, other):
class UDS_AUTH (line 286) | class UDS_AUTH(Packet):
class UDS_AUTHPR (line 361) | class UDS_AUTHPR(Packet):
method answers (line 433) | def answers(self, other):
class UDS_TP (line 442) | class UDS_TP(Packet):
class UDS_TPPR (line 452) | class UDS_TPPR(Packet):
method answers (line 458) | def answers(self, other):
class UDS_ATP (line 466) | class UDS_ATP(Packet):
class UDS_ATPPR (line 486) | class UDS_ATPPR(Packet):
method answers (line 495) | def answers(self, other):
class UDS_SDT (line 507) | class UDS_SDT(Packet):
class UDS_SDTPR (line 528) | class UDS_SDTPR(Packet):
method answers (line 545) | def answers(self, other):
class UDS_CDTCS (line 553) | class UDS_CDTCS(Packet):
class UDS_CDTCSPR (line 569) | class UDS_CDTCSPR(Packet):
method answers (line 575) | def answers(self, other):
class UDS_ROE (line 584) | class UDS_ROE(Packet):
class UDS_ROEPR (line 600) | class UDS_ROEPR(Packet):
method answers (line 609) | def answers(self, other):
class UDS_LC (line 618) | class UDS_LC(Packet):
class UDS_LCPR (line 642) | class UDS_LCPR(Packet):
method answers (line 648) | def answers(self, other):
class UDS_RDBI (line 657) | class UDS_RDBI(Packet):
class UDS_RDBIPR (line 670) | class UDS_RDBIPR(Packet):
method answers (line 677) | def answers(self, other):
class UDS_RMBA (line 686) | class UDS_RMBA(Packet):
class UDS_RMBAPR (line 713) | class UDS_RMBAPR(Packet):
method answers (line 719) | def answers(self, other):
class UDS_RSDBI (line 727) | class UDS_RSDBI(Packet):
class UDS_RSDBIPR (line 739) | class UDS_RSDBIPR(Packet):
method answers (line 747) | def answers(self, other):
class UDS_RDBPI (line 756) | class UDS_RDBPI(Packet):
class UDS_RDBPIPR (line 777) | class UDS_RDBPIPR(Packet):
method answers (line 784) | def answers(self, other):
class UDS_DDDI (line 795) | class UDS_DDDI(Packet):
class UDS_DDDIPR (line 809) | class UDS_DDDIPR(Packet):
method answers (line 816) | def answers(self, other):
class UDS_WDBI (line 825) | class UDS_WDBI(Packet):
class UDS_WDBIPR (line 836) | class UDS_WDBIPR(Packet):
method answers (line 843) | def answers(self, other):
class UDS_WMBA (line 852) | class UDS_WMBA(Packet):
class UDS_WMBAPR (line 881) | class UDS_WMBAPR(Packet):
method answers (line 904) | def answers(self, other):
class DTC (line 914) | class DTC(Packet):
method extract_padding (line 933) | def extract_padding(self, s):
class UDS_CDTCI (line 938) | class UDS_CDTCI(Packet):
class UDS_CDTCIPR (line 950) | class UDS_CDTCIPR(Packet):
method answers (line 953) | def answers(self, other):
class UDS_RDTCI (line 961) | class UDS_RDTCI(Packet):
class DTCAndStatusRecord (line 1034) | class DTCAndStatusRecord(Packet):
method extract_padding (line 1041) | def extract_padding(self, s):
class DTCExtendedData (line 1045) | class DTCExtendedData(Packet):
method extract_padding (line 1053) | def extract_padding(self, s):
class DTCExtendedDataRecord (line 1057) | class DTCExtendedDataRecord(Packet):
class DTCSnapshot (line 1064) | class DTCSnapshot(Packet):
method next_identifier_cb (line 1068) | def next_identifier_cb(pkt, lst, cur, remain):
method extract_padding (line 1080) | def extract_padding(self, s):
class DTCSnapshotRecord (line 1084) | class DTCSnapshotRecord(Packet):
class UDS_RDTCIPR (line 1091) | class UDS_RDTCIPR(Packet):
method answers (line 1128) | def answers(self, other):
class UDS_RC (line 1146) | class UDS_RC(Packet):
class UDS_RCPR (line 1164) | class UDS_RCPR(Packet):
method answers (line 1172) | def answers(self, other):
class UDS_RD (line 1187) | class UDS_RD(Packet):
class UDS_RDPR (line 1218) | class UDS_RDPR(Packet):
method answers (line 1226) | def answers(self, other):
class UDS_RU (line 1234) | class UDS_RU(Packet):
class UDS_RUPR (line 1263) | class UDS_RUPR(Packet):
method answers (line 1271) | def answers(self, other):
class UDS_TD (line 1279) | class UDS_TD(Packet):
class UDS_TDPR (line 1290) | class UDS_TDPR(Packet):
method answers (line 1297) | def answers(self, other):
class UDS_RTE (line 1306) | class UDS_RTE(Packet):
class UDS_RTEPR (line 1316) | class UDS_RTEPR(Packet):
method answers (line 1322) | def answers(self, other):
class UDS_RFT (line 1330) | class UDS_RFT(Packet):
method _contains_file_size (line 1343) | def _contains_file_size(packet):
class UDS_RFTPR (line 1374) | class UDS_RFTPR(Packet):
method _contains_data_format_identifier (line 1378) | def _contains_data_format_identifier(packet):
method answers (line 1409) | def answers(self, other):
class UDS_IOCBI (line 1417) | class UDS_IOCBI(Packet):
class UDS_IOCBIPR (line 1427) | class UDS_IOCBIPR(Packet):
method answers (line 1433) | def answers(self, other):
class UDS_NR (line 1442) | class UDS_NR(Packet):
method answers (line 1512) | def answers(self, other):
class UDS_TesterPresentSender (line 1526) | class UDS_TesterPresentSender(PeriodicSenderThread):
method __init__ (line 1527) | def __init__(self, sock, pkt=UDS() / UDS_TP(subFunction=0x80), interva...
FILE: scapy/contrib/automotive/uds_ecu_states.py
function UDS_DSCPR_modify_ecu_state (line 21) | def UDS_DSCPR_modify_ecu_state(self, req, state):
function UDS_ERPR_modify_ecu_state (line 31) | def UDS_ERPR_modify_ecu_state(self, req, state):
function UDS_SAPR_modify_ecu_state (line 38) | def UDS_SAPR_modify_ecu_state(self, req, state):
function UDS_CCPR_modify_ecu_state (line 50) | def UDS_CCPR_modify_ecu_state(self, req, state):
function UDS_TPPR_modify_ecu_state (line 56) | def UDS_TPPR_modify_ecu_state(self, req, state):
function UDS_RDBPIPR_modify_ecu_state (line 62) | def UDS_RDBPIPR_modify_ecu_state(self, req, state):
function UDS_RDPR_modify_ecu_state (line 68) | def UDS_RDPR_modify_ecu_state(self, req, state):
function UDS_modify_ecu_state (line 76) | def UDS_modify_ecu_state(self, req, state):
FILE: scapy/contrib/automotive/uds_logging.py
function UDS_DSC_get_log (line 26) | def UDS_DSC_get_log(self):
function UDS_DSCPR_get_log (line 33) | def UDS_DSCPR_get_log(self):
function UDS_ER_get_log (line 40) | def UDS_ER_get_log(self):
function UDS_ERPR_get_log (line 47) | def UDS_ERPR_get_log(self):
function UDS_SA_get_log (line 54) | def UDS_SA_get_log(self):
function UDS_SAPR_get_log (line 65) | def UDS_SAPR_get_log(self):
function UDS_CC_get_log (line 76) | def UDS_CC_get_log(self):
function UDS_CCPR_get_log (line 83) | def UDS_CCPR_get_log(self):
function UDS_TP_get_log (line 90) | def UDS_TP_get_log(self):
function UDS_TPPR_get_log (line 96) | def UDS_TPPR_get_log(self):
function UDS_SDT_get_log (line 102) | def UDS_SDT_get_log(self):
function UDS_SDTPR_get_log (line 108) | def UDS_SDTPR_get_log(self):
function UDS_CDTCS_get_log (line 114) | def UDS_CDTCS_get_log(self):
function UDS_CDTCSPR_get_log (line 121) | def UDS_CDTCSPR_get_log(self):
function UDS_LC_get_log (line 128) | def UDS_LC_get_log(self):
function UDS_LCPR_get_log (line 135) | def UDS_LCPR_get_log(self):
function UDS_RDBI_get_log (line 142) | def UDS_RDBI_get_log(self):
function UDS_RDBIPR_get_log (line 149) | def UDS_RDBIPR_get_log(self):
function UDS_RMBA_get_log (line 156) | def UDS_RMBA_get_log(self):
function UDS_RMBAPR_get_log (line 164) | def UDS_RMBAPR_get_log(self):
function UDS_WDBI_get_log (line 170) | def UDS_WDBI_get_log(self):
function UDS_WDBIPR_get_log (line 177) | def UDS_WDBIPR_get_log(self):
function UDS_WMBA_get_log (line 184) | def UDS_WMBA_get_log(self):
function UDS_WMBAPR_get_log (line 192) | def UDS_WMBAPR_get_log(self):
function UDS_CDTCI_get_log (line 200) | def UDS_CDTCI_get_log(self):
function UDS_CDTCIPR_get_log (line 208) | def UDS_CDTCIPR_get_log(self):
function UDS_RDTCI_get_log (line 214) | def UDS_RDTCI_get_log(self):
function UDS_RDTCIPR_get_log (line 220) | def UDS_RDTCIPR_get_log(self):
function UDS_RC_get_log (line 226) | def UDS_RC_get_log(self):
function UDS_RCPR_get_log (line 234) | def UDS_RCPR_get_log(self):
function UDS_RD_get_log (line 242) | def UDS_RD_get_log(self):
function UDS_RDPR_get_log (line 250) | def UDS_RDPR_get_log(self):
function UDS_RU_get_log (line 256) | def UDS_RU_get_log(self):
function UDS_RUPR_get_log (line 264) | def UDS_RUPR_get_log(self):
function UDS_TD_get_log (line 270) | def UDS_TD_get_log(self):
function UDS_TDPR_get_log (line 277) | def UDS_TDPR_get_log(self):
function UDS_RTE_get_log (line 283) | def UDS_RTE_get_log(self):
function UDS_RTEPR_get_log (line 290) | def UDS_RTEPR_get_log(self):
function UDS_RFT_get_log (line 297) | def UDS_RFT_get_log(self):
function UDS_RFTPR_get_log (line 304) | def UDS_RFTPR_get_log(self):
function UDS_IOCBI_get_log (line 311) | def UDS_IOCBI_get_log(self):
function UDS_IOCBIPR_get_log (line 317) | def UDS_IOCBIPR_get_log(self):
function UDS_NR_get_log (line 323) | def UDS_NR_get_log(self):
FILE: scapy/contrib/automotive/uds_scan.py
class UDS_Enumerator (line 64) | class UDS_Enumerator(ServiceEnumerator, ABC):
method _get_negative_response_code (line 66) | def _get_negative_response_code(resp):
method _get_negative_response_desc (line 71) | def _get_negative_response_desc(nrc):
method _get_table_entry_z (line 76) | def _get_table_entry_z(self, tup):
method _get_negative_response_label (line 81) | def _get_negative_response_label(response):
class UDS_DSCEnumerator (line 86) | class UDS_DSCEnumerator(UDS_Enumerator, StateGeneratingServiceEnumerator):
method _get_initial_requests (line 125) | def _get_initial_requests(self, **kwargs):
method execute (line 130) | def execute(self, socket, state, **kwargs):
method _get_table_entry_y (line 146) | def _get_table_entry_y(self, tup):
method enter_state (line 153) | def enter_state(socket, # type: _SocketUnion
method get_new_edge (line 171) | def get_new_edge(self,
method enter_state_with_tp (line 218) | def enter_state_with_tp(sock, # type: _SocketUnion
method get_transition_function (line 257) | def get_transition_function(self, socket, edge):
class UDS_TPEnumerator (line 265) | class UDS_TPEnumerator(UDS_Enumerator, StateGeneratingServiceEnumerator):
method _get_initial_requests (line 268) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 272) | def _get_table_entry_y(self, tup):
method enter (line 277) | def enter(socket, # type: _SocketUnion
method cleanup (line 292) | def cleanup(_, configuration):
method get_transition_function (line 302) | def get_transition_function(self, socket, edge):
class UDS_EREnumerator (line 307) | class UDS_EREnumerator(UDS_Enumerator):
method _get_initial_requests (line 313) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 318) | def _get_table_entry_y(self, tup):
class UDS_CCEnumerator (line 324) | class UDS_CCEnumerator(UDS_Enumerator):
method _get_initial_requests (line 330) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 337) | def _get_table_entry_y(self, tup):
class UDS_RDBPIEnumerator (line 343) | class UDS_RDBPIEnumerator(UDS_Enumerator):
method _get_initial_requests (line 349) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 355) | def _get_table_entry_y(self, tup):
class UDS_ServiceEnumerator (line 369) | class UDS_ServiceEnumerator(UDS_Enumerator):
method execute (line 385) | def execute(self, socket, state, **kwargs):
method _get_initial_requests (line 391) | def _get_initial_requests(self, **kwargs):
method _evaluate_response (line 402) | def _evaluate_response(self,
method _get_table_entry_y (line 419) | def _get_table_entry_y(self, tup):
class UDS_RDBIEnumerator (line 425) | class UDS_RDBIEnumerator(UDS_Enumerator):
method _get_initial_requests (line 431) | def _get_initial_requests(self, **kwargs):
method print_information (line 437) | def print_information(resp):
method _get_table_entry_y (line 442) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 447) | def _get_table_entry_z(self, tup):
class UDS_RDBISelectiveEnumerator (line 452) | class UDS_RDBISelectiveEnumerator(StagedAutomotiveTestCase):
method __connector_rnd_to_seq (line 454) | def __connector_rnd_to_seq(rdbi_random, # type: AutomotiveTestCaseABC
method points_to_blocks (line 467) | def points_to_blocks(pois):
method __init__ (line 485) | def __init__(self):
class UDS_RDBIRandomEnumerator (line 492) | class UDS_RDBIRandomEnumerator(UDS_RDBIEnumerator):
method execute (line 504) | def execute(self, socket, state, **kwargs):
method _get_initial_requests (line 510) | def _get_initial_requests(self, **kwargs):
class UDS_WDBIEnumerator (line 554) | class UDS_WDBIEnumerator(UDS_Enumerator):
method execute (line 569) | def execute(self, socket, state, **kwargs):
method _get_initial_requests (line 575) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 593) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 598) | def _get_table_entry_z(self, tup):
class UDS_WDBISelectiveEnumerator (line 603) | class UDS_WDBISelectiveEnumerator(StagedAutomotiveTestCase):
method __connector_rdbi_to_wdbi (line 605) | def __connector_rdbi_to_wdbi(rdbi, # type: AutomotiveTestCaseABC
method __init__ (line 610) | def __init__(self):
class UDS_SAEnumerator (line 617) | class UDS_SAEnumerator(UDS_Enumerator):
method _get_initial_requests (line 623) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 628) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 632) | def _get_table_entry_z(self, tup):
method pre_execute (line 636) | def pre_execute(self, socket, state, global_configuration):
method _evaluate_retry (line 645) | def _evaluate_retry(self,
method _evaluate_response (line 666) | def _evaluate_response(self,
method get_seed_pkt (line 684) | def get_seed_pkt(sock, level=1, record=b""):
method evaluate_security_access_response (line 707) | def evaluate_security_access_response(res, seed, key):
class UDS_SA_XOR_Enumerator (line 720) | class UDS_SA_XOR_Enumerator(UDS_SAEnumerator, StateGenerator):
method get_key_pkt (line 725) | def get_key_pkt(seed, level=1):
method get_security_access (line 759) | def get_security_access(self, sock, level=1, seed_pkt=None):
method transition_function (line 796) | def transition_function(self, sock, _, kwargs):
method get_new_edge (line 803) | def get_new_edge(self, socket, config):
method get_transition_function (line 835) | def get_transition_function(self, socket, edge):
class UDS_RCEnumerator (line 841) | class UDS_RCEnumerator(UDS_Enumerator):
method _get_initial_requests (line 855) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 866) | def _get_table_entry_y(self, tup):
class UDS_RCStartEnumerator (line 873) | class UDS_RCStartEnumerator(UDS_RCEnumerator):
method _get_initial_requests (line 876) | def _get_initial_requests(self, **kwargs):
class UDS_RCSelectiveEnumerator (line 885) | class UDS_RCSelectiveEnumerator(StagedAutomotiveTestCase):
method points_to_ranges (line 891) | def points_to_ranges(pois):
method __connector_start_to_rest (line 903) | def __connector_start_to_rest(rc_start, _rc_stop):
method __init__ (line 914) | def __init__(self):
class UDS_IOCBIEnumerator (line 921) | class UDS_IOCBIEnumerator(UDS_Enumerator):
method _get_initial_requests (line 928) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 933) | def _get_table_entry_y(self, tup):
class UDS_RMBAEnumeratorABC (line 944) | class UDS_RMBAEnumeratorABC(UDS_Enumerator):
method get_addr (line 949) | def get_addr(pkt):
method set_addr (line 959) | def set_addr(pkt, addr):
method get_size (line 969) | def get_size(pkt):
method set_size (line 978) | def set_size(pkt, size):
method _get_table_entry_y (line 988) | def _get_table_entry_y(self, tup):
method _get_table_entry_z (line 992) | def _get_table_entry_z(self, tup):
class UDS_RMBARandomEnumerator (line 997) | class UDS_RMBARandomEnumerator(UDS_RMBAEnumeratorABC):
method execute (line 1008) | def execute(self, socket, state, **kwargs):
method _random_memory_addr_pkt (line 1015) | def _random_memory_addr_pkt(addr_len=None, size_len=None, size=None):
method _get_initial_requests (line 1026) | def _get_initial_requests(self, **kwargs):
class UDS_RMBASequentialEnumerator (line 1041) | class UDS_RMBASequentialEnumerator(UDS_RMBAEnumeratorABC):
method execute (line 1052) | def execute(self, socket, state, **kwargs):
method __init__ (line 1059) | def __init__(self):
method _get_memory_addresses_from_results (line 1066) | def _get_memory_addresses_from_results(self, results):
method __pois_to_requests (line 1081) | def __pois_to_requests(self, pois):
method __request_to_pois (line 1106) | def __request_to_pois(self, req, resp):
method _get_initial_requests (line 1128) | def _get_initial_requests(self, **kwargs):
method pre_execute (line 1132) | def pre_execute(self, socket, state, global_configuration):
method _evaluate_response (line 1155) | def _evaluate_response(self,
method show (line 1166) | def show(self, dump=False, filtered=True, verbose=False):
class UDS_RMBAEnumerator (line 1194) | class UDS_RMBAEnumerator(StagedAutomotiveTestCase):
method __connector_rand_to_seq (line 1196) | def __connector_rand_to_seq(rand, _):
method __init__ (line 1211) | def __init__(self):
class UDS_RDEnumerator (line 1218) | class UDS_RDEnumerator(UDS_Enumerator):
method execute (line 1229) | def execute(self, socket, state, **kwargs):
method _random_memory_addr_pkt (line 1236) | def _random_memory_addr_pkt(addr_len=None): # noqa: E501
method _get_initial_requests (line 1247) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 1260) | def _get_table_entry_y(self, tup):
class UDS_TDEnumerator (line 1265) | class UDS_TDEnumerator(UDS_Enumerator):
method _get_initial_requests (line 1271) | def _get_initial_requests(self, **kwargs):
method _get_table_entry_y (line 1276) | def _get_table_entry_y(self, tup):
class UDS_Scanner (line 1283) | class UDS_Scanner(AutomotiveTestCaseExecutor):
method default_test_case_clss (line 1312) | def default_test_case_clss(self):
function uds_software_reset (line 1319) | def uds_software_reset(connection, # type: _SocketUnion
FILE: scapy/contrib/automotive/xcp/cto_commands_master.py
class Connect (line 20) | class Connect(Packet):
class Disconnect (line 27) | class Disconnect(Packet):
class GetStatus (line 32) | class GetStatus(Packet):
class Synch (line 37) | class Synch(Packet):
class GetCommModeInfo (line 42) | class GetCommModeInfo(Packet):
class GetId (line 47) | class GetId(Packet):
class SetRequest (line 58) | class SetRequest(Packet):
class GetSeed (line 68) | class GetSeed(Packet):
class Unlock (line 78) | class Unlock(Packet):
class SetMta (line 87) | class SetMta(Packet):
class Upload (line 101) | class Upload(Packet):
class ShortUpload (line 106) | class ShortUpload(Packet):
class BuildChecksum (line 116) | class BuildChecksum(Packet):
class TransportLayerCmd (line 128) | class TransportLayerCmd(Packet):
class TransportLayerCmdGetSlaveId (line 140) | class TransportLayerCmdGetSlaveId(Packet):
class TransportLayerCmdGetDAQId (line 158) | class TransportLayerCmdGetDAQId(Packet):
class TransportLayerCmdSetDAQId (line 168) | class TransportLayerCmdSetDAQId(Packet):
class UserCmd (line 182) | class UserCmd(Packet):
class Download (line 191) | class Download(Packet):
class DownloadNext (line 205) | class DownloadNext(Download):
class DownloadMax (line 211) | class DownloadMax(Packet):
class ShortDownload (line 222) | class ShortDownload(Packet):
class ModifyBits (line 234) | class ModifyBits(Packet):
class SetCalPage (line 244) | class SetCalPage(Packet):
class GetCalPage (line 254) | class GetCalPage(Packet):
class GetPagProcessorInfo (line 262) | class GetPagProcessorInfo(Packet):
class GetSegmentInfo (line 267) | class GetSegmentInfo(Packet):
class GetPageInfo (line 284) | class GetPageInfo(Packet):
class SetSegmentMode (line 293) | class SetSegmentMode(Packet):
class GetSegmentMode (line 302) | class GetSegmentMode(Packet):
class CopyCalPage (line 310) | class CopyCalPage(Packet):
class SetDaqPtr (line 322) | class SetDaqPtr(Packet):
class WriteDaq (line 332) | class WriteDaq(Packet):
class SetDaqListMode (line 342) | class SetDaqListMode(Packet):
class GetDaqListMode (line 355) | class GetDaqListMode(Packet):
class StartStopDaqList (line 363) | class StartStopDaqList(Packet):
class StartStopSynch (line 372) | class StartStopSynch(Packet):
class ReadDaq (line 380) | class ReadDaq(Packet):
class GetDaqClock (line 385) | class GetDaqClock(Packet):
class GetDaqProcessorInfo (line 390) | class GetDaqProcessorInfo(Packet):
class GetDaqResolutionInfo (line 395) | class GetDaqResolutionInfo(Packet):
class GetDaqListInfo (line 400) | class GetDaqListInfo(Packet):
class GetDaqEventInfo (line 408) | class GetDaqEventInfo(Packet):
class ClearDaqList (line 418) | class ClearDaqList(Packet):
class FreeDaq (line 429) | class FreeDaq(Packet):
class AllocDaq (line 434) | class AllocDaq(Packet):
class AllocOdt (line 442) | class AllocOdt(Packet):
class AllocOdtEntry (line 451) | class AllocOdtEntry(Packet):
class ProgramStart (line 463) | class ProgramStart(Packet):
class ProgramClear (line 468) | class ProgramClear(Packet):
class Program (line 478) | class Program(Download):
class ProgramReset (line 484) | class ProgramReset(Packet):
class GetPgmProcessorInfo (line 489) | class GetPgmProcessorInfo(Packet):
class GetSectorInfo (line 494) | class GetSectorInfo(Packet):
class ProgramPrepare (line 503) | class ProgramPrepare(Packet):
class ProgramFormat (line 511) | class ProgramFormat(Packet):
class ProgramNext (line 521) | class ProgramNext(Download):
class ProgramMax (line 527) | class ProgramMax(DownloadMax):
class ProgramVerify (line 533) | class ProgramVerify(Packet):
FILE: scapy/contrib/automotive/xcp/cto_commands_slave.py
class NegativeResponse (line 22) | class NegativeResponse(Packet):
class GenericResponse (line 50) | class GenericResponse(Packet):
class ConnectPositiveResponse (line 57) | class ConnectPositiveResponse(Packet):
method post_dissection (line 74) | def post_dissection(self, pkt):
method get_address_granularity (line 92) | def get_address_granularity(self):
class StatusPositiveResponse (line 109) | class StatusPositiveResponse(Packet):
class CommonModeInfoPositiveResponse (line 121) | class CommonModeInfoPositiveResponse(Packet):
class IdPositiveResponse (line 135) | class IdPositiveResponse(Packet):
class SeedPositiveResponse (line 146) | class SeedPositiveResponse(Packet):
class UnlockPositiveResponse (line 154) | class UnlockPositiveResponse(Packet):
class UploadPositiveResponse (line 161) | class UploadPositiveResponse(Packet):
class ShortUploadPositiveResponse (line 172) | class ShortUploadPositiveResponse(Packet):
class ChecksumPositiveResponse (line 183) | class ChecksumPositiveResponse(Packet):
class TransportLayerCmdGetSlaveIdResponse (line 208) | class TransportLayerCmdGetSlaveIdResponse(Packet):
class TransportLayerCmdGetDAQIdResponse (line 217) | class TransportLayerCmdGetDAQIdResponse(Packet):
class CalPagePositiveResponse (line 229) | class CalPagePositiveResponse(Packet):
class PagProcessorInfoPositiveResponse (line 237) | class PagProcessorInfoPositiveResponse(Packet):
class SegmentInfoMode0PositiveResponse (line 246) | class SegmentInfoMode0PositiveResponse(Packet):
class SegmentInfoMode1PositiveResponse (line 255) | class SegmentInfoMode1PositiveResponse(Packet):
class SegmentInfoMode2PositiveResponse (line 265) | class SegmentInfoMode2PositiveResponse(Packet):
class PageInfoPositiveResponse (line 274) | class PageInfoPositiveResponse(Packet):
class SegmentModePositiveResponse (line 285) | class SegmentModePositiveResponse(Packet):
class DAQListModePositiveResponse (line 293) | class DAQListModePositiveResponse(Packet):
class StartStopDAQListPositiveResponse (line 305) | class StartStopDAQListPositiveResponse(Packet):
class DAQClockListPositiveResponse (line 311) | class DAQClockListPositiveResponse(Packet):
class ReadDAQPositiveResponse (line 320) | class ReadDAQPositiveResponse(Packet):
class DAQProcessorInfoPositiveResponse (line 329) | class DAQProcessorInfoPositiveResponse(Packet):
method write_identification_field_type_to_config (line 347) | def write_identification_field_type_to_config(self):
method post_dissection (line 355) | def post_dissection(self, pkt):
class DAQResolutionInfoPositiveResponse (line 359) | class DAQResolutionInfoPositiveResponse(Packet):
method get_timestamp_size (line 371) | def get_timestamp_size(self):
method write_timestamp_size_to_config (line 384) | def write_timestamp_size_to_config(self):
method post_dissection (line 387) | def post_dissection(self, pkt):
class DAQListInfoPositiveResponse (line 391) | class DAQListInfoPositiveResponse(Packet):
class DAQEventInfoPositiveResponse (line 402) | class DAQEventInfoPositiveResponse(Packet):
class ProgramStartPositiveResponse (line 414) | class ProgramStartPositiveResponse(Packet):
class PgmProcessorPositiveResponse (line 427) | class PgmProcessorPositiveResponse(Packet):
class SectorInfoPositiveResponse (line 438) | class SectorInfoPositiveResponse(Packet):
class EvPacket (line 447) | class EvPacket(Packet):
class ServPacket (line 467) | class ServPacket(Packet):
FILE: scapy/contrib/automotive/xcp/scanner.py
class XCPOnCANScanner (line 31) | class XCPOnCANScanner:
method __init__ (line 36) | def __init__(self, can_socket, id_range=None,
method _scan (line 55) | def _scan(self, identifier, body, pid, answer_type):
method _send_connect (line 78) | def _send_connect(self, identifier):
method _send_get_slave_id (line 101) | def _send_get_slave_id(self, identifier):
method scan_with_get_slave_id (line 135) | def scan_with_get_slave_id(self):
method scan_with_connect (line 149) | def scan_with_connect(self):
FILE: scapy/contrib/automotive/xcp/utils.py
function get_max_cto (line 16) | def get_max_cto():
function get_max_dto (line 25) | def get_max_dto():
function get_ag (line 34) | def get_ag():
function get_timestamp_length (line 51) | def get_timestamp_length():
function identification_field_needs_alignment (line 55) | def identification_field_needs_alignment():
function get_daq_length (line 70) | def get_daq_length():
function get_daq_data_field_length (line 91) | def get_daq_data_field_length():
class XCPEndiannessField (line 105) | class XCPEndiannessField(object):
method __init__ (line 109) | def __init__(self, fld):
method set_endianness (line 112) | def set_endianness(self):
method getfield (line 120) | def getfield(self, pkt, s):
method addfield (line 125) | def addfield(self, pkt, s, val):
method __getattr__ (line 129) | def __getattr__(self, attr):
class StrVarLenField (line 133) | class StrVarLenField(StrLenField):
method randval (line 134) | def randval(self):
FILE: scapy/contrib/automotive/xcp/xcp.py
class XCPOnCAN (line 78) | class XCPOnCAN(CAN):
method post_build (line 89) | def post_build(self, pkt, pay):
method extract_padding (line 98) | def extract_padding(self, p):
class XCPOnUDP (line 102) | class XCPOnUDP(UDP):
method post_build (line 109) | def post_build(self, pkt, pay):
class XCPOnTCP (line 116) | class XCPOnTCP(TCP):
method answers (line 124) | def answers(self, other):
method post_build (line 131) | def post_build(self, pkt, pay):
class XCPOnCANTail (line 140) | class XCPOnCANTail(Packet):
class CTORequest (line 148) | class CTORequest(Packet):
class DTO (line 307) | class DTO(Packet):
class CTOResponse (line 330) | class CTOResponse(Packet):
method get_positive_response_cls (line 344) | def get_positive_response_cls(request):
method answers (line 388) | def answers(self, request):
FILE: scapy/contrib/avs.py
class AVSWLANHeader (line 39) | class AVSWLANHeader(Packet):
FILE: scapy/contrib/bfd.py
class OptionalAuth (line 66) | class OptionalAuth(Packet):
class BFD (line 112) | class BFD(Packet):
method mysummary (line 138) | def mysummary(self):
FILE: scapy/contrib/bgp.py
class BGPConf (line 37) | class BGPConf(ConfClass):
function _bits_to_bytes_len (line 80) | def _bits_to_bytes_len(length_in_bits):
class BGPFieldIPv4 (line 89) | class BGPFieldIPv4(Field):
method mask2iplen (line 94) | def mask2iplen(self, mask):
method h2i (line 98) | def h2i(self, pkt, h):
method i2h (line 103) | def i2h(self, pkt, i):
method i2repr (line 109) | def i2repr(self, pkt, i):
method i2len (line 112) | def i2len(self, pkt, i):
method i2m (line 116) | def i2m(self, pkt, i):
method addfield (line 123) | def addfield(self, pkt, s, val):
method getfield (line 126) | def getfield(self, pkt, s):
method m2i (line 130) | def m2i(self, pkt, m):
class BGPFieldIPv6 (line 137) | class BGPFieldIPv6(Field):
method mask2iplen (line 140) | def mask2iplen(self, mask):
method h2i (line 144) | def h2i(self, pkt, h):
method i2h (line 149) | def i2h(self, pkt, i):
method i2repr (line 154) | def i2repr(self, pkt, i):
method i2len (line 157) | def i2len(self, pkt, i):
method i2m (line 161) | def i2m(self, pkt, i):
method addfield (line 167) | def addfield(self, pkt, s, val):
method getfield (line 170) | def getfield(self, pkt, s):
method m2i (line 174) | def m2i(self, pkt, m):
function has_extended_length (line 180) | def has_extended_length(flags):
function detect_add_path_prefix46 (line 189) | def detect_add_path_prefix46(s, max_bit_length):
class BGPNLRI_IPv4 (line 230) | class BGPNLRI_IPv4(Packet):
method default_payload_class (line 237) | def default_payload_class(self, payload):
class BGPNLRI_IPv6 (line 241) | class BGPNLRI_IPv6(Packet):
method default_payload_class (line 248) | def default_payload_class(self, payload):
class BGPNLRI_IPv4_AP (line 252) | class BGPNLRI_IPv4_AP(BGPNLRI_IPv4):
class BGPNLRI_IPv6_AP (line 262) | class BGPNLRI_IPv6_AP(BGPNLRI_IPv6):
class BGPNLRIPacketListField (line 272) | class BGPNLRIPacketListField(PacketListField):
method __init__ (line 278) | def __init__(self, name, default, ip_mode, **kwargs):
method getfield (line 288) | def getfield(self, pkt, s):
class _BGPInvalidDataException (line 307) | class _BGPInvalidDataException(Exception):
method __init__ (line 313) | def __init__(self, details):
function _get_cls (line 320) | def _get_cls(name, fallback_cls=conf.raw_layer):
class BGPHeader (line 439) | class BGPHeader(Packet):
method dispatch_hook (line 457) | def dispatch_hook(cls, _pkt=None, *args, **kargs):
method tcp_reassemble (line 465) | def tcp_reassemble(cls, data, *args, **kwargs):
method post_build (line 475) | def post_build(self, p, pay):
method guess_payload_class (line 483) | def guess_payload_class(self, payload):
function _bgp_dispatcher (line 487) | def _bgp_dispatcher(payload):
class BGP (line 512) | class BGP(Packet):
method dispatch_hook (line 527) | def dispatch_hook(cls, _pkt=None, *args, **kargs):
method guess_payload_class (line 536) | def guess_payload_class(self, p):
class BGPKeepAlive (line 547) | class BGPKeepAlive(BGP, BGPHeader):
function _register_cls (line 609) | def _register_cls(registry, cls):
function _bgp_capability_dispatcher (line 617) | def _bgp_capability_dispatcher(payload):
class _BGPCap_metaclass (line 637) | class _BGPCap_metaclass(type):
method __new__ (line 638) | def __new__(cls, clsname, bases, attrs):
class _BGPCapability_metaclass (line 645) | class _BGPCapability_metaclass(_BGPCap_metaclass, Packet_metaclass):
class BGPCapability (line 649) | class BGPCapability(Packet, metaclass=_BGPCapability_metaclass):
method dispatch_hook (line 655) | def dispatch_hook(cls, _pkt=None, *args, **kargs):
method pre_dissect (line 662) | def pre_dissect(self, s):
method post_build (line 673) | def post_build(self, p, pay):
class BGPCapGeneric (line 683) | class BGPCapGeneric(BGPCapability):
class BGPCapMultiprotocol (line 702) | class BGPCapMultiprotocol(BGPCapability):
class BGPCapORFBlock (line 738) | class BGPCapORFBlock(Packet):
class ORFTuple (line 744) | class ORFTuple(Packet):
method post_build (line 776) | def post_build(self, p, pay):
class BGPCapORFBlockPacketListField (line 784) | class BGPCapORFBlockPacketListField(PacketListField):
method getfield (line 789) | def getfield(self, pkt, s):
class BGPCapORF (line 812) | class BGPCapORF(BGPCapability):
class BGPCapGracefulRestart (line 843) | class BGPCapGracefulRestart(BGPCapability):
class GRTuple (line 850) | class GRTuple(Packet):
class BGPCapFourBytesASN (line 871) | class BGPCapFourBytesASN(BGPCapability):
class BGPAuthenticationInformation (line 889) | class BGPAuthenticationInformation(Packet):
class BGPOptParamPacketListField (line 907) | class BGPOptParamPacketListField(PacketListField):
method getfield (line 912) | def getfield(self, pkt, s):
class BGPOptParam (line 932) | class BGPOptParam(Packet):
method post_build (line 962) | def post_build(self, p, pay):
class BGPOpen (line 983) | class BGPOpen(BGP):
method post_build (line 1009) | def post_build(self, p, pay):
class BGPPathAttrPacketListField (line 1104) | class BGPPathAttrPacketListField(PacketListField):
method getfield (line 1109) | def getfield(self, pkt, s):
class BGPPAOrigin (line 1145) | class BGPPAOrigin(Packet):
class ASPathSegmentPacketListField (line 1172) | class ASPathSegmentPacketListField(PacketListField):
method getfield (line 1177) | def getfield(self, pkt, s):
class BGPPAASPath (line 1199) | class BGPPAASPath(Packet):
class ASPathSegment (line 1208) | class ASPathSegment(Packet):
method post_build (line 1219) | def post_build(self, p, pay):
class BGPPAAS4BytesPath (line 1232) | class BGPPAAS4BytesPath(Packet):
class ASPathSegment (line 1239) | class ASPathSegment(Packet):
method post_build (line 1248) | def post_build(self, p, pay):
class BGPPANextHop (line 1265) | class BGPPANextHop(Packet):
class BGPPAMultiExitDisc (line 1279) | class BGPPAMultiExitDisc(Packet):
class BGPPALocalPref (line 1293) | class BGPPALocalPref(Packet):
class BGPPAAtomicAggregate (line 1307) | class BGPPAAtomicAggregate(Packet):
class BGPPAAggregator (line 1320) | class BGPPAAggregator(Packet):
class BGPPACommunity (line 1353) | class BGPPACommunity(Packet):
class BGPPAOriginatorID (line 1367) | class BGPPAOriginatorID(Packet):
class BGPPAClusterList (line 1381) | class BGPPAClusterList(Packet):
class BGPPAExtCommTwoOctetASSpecific (line 1572) | class BGPPAExtCommTwoOctetASSpecific(Packet):
class BGPPAExtCommFourOctetASSpecific (line 1584) | class BGPPAExtCommFourOctetASSpecific(Packet):
class BGPPAExtCommIPv4AddressSpecific (line 1596) | class BGPPAExtCommIPv4AddressSpecific(Packet):
class BGPPAExtCommOpaque (line 1608) | class BGPPAExtCommOpaque(Packet):
class BGPPAExtCommTrafficRate (line 1622) | class BGPPAExtCommTrafficRate(Packet):
class BGPPAExtCommTrafficAction (line 1635) | class BGPPAExtCommTrafficAction(Packet):
class BGPPAExtCommRedirectAS2Byte (line 1649) | class BGPPAExtCommRedirectAS2Byte(Packet):
class BGPPAExtCommRedirectIPv4 (line 1663) | class BGPPAExtCommRedirectIPv4(Packet):
class BGPPAExtCommRedirectAS4Byte (line 1677) | class BGPPAExtCommRedirectAS4Byte(Packet):
class BGPPAExtCommTrafficMarking (line 1691) | class BGPPAExtCommTrafficMarking(Packet):
class _ExtCommValuePacketField (line 1717) | class _ExtCommValuePacketField(PacketField):
method __init__ (line 1724) | def __init__(self, name, default, cls, type_from=(0, 0)):
method m2i (line 1728) | def m2i(self, pkt, m):
class BGPPAIPv6AddressSpecificExtComm (line 1778) | class BGPPAIPv6AddressSpecificExtComm(Packet):
function _get_ext_comm_subtype (line 1791) | def _get_ext_comm_subtype(type_high):
class _TypeLowField (line 1800) | class _TypeLowField(ByteField):
method __init__ (line 1807) | def __init__(self, name, default, enum_from=None):
method i2repr (line 1811) | def i2repr(self, pkt, i):
class BGPPAExtCommunity (line 1816) | class BGPPAExtCommunity(Packet):
method post_build (line 1838) | def post_build(self, p, pay):
class _ExtCommsPacketListField (line 1847) | class _ExtCommsPacketListField(PacketListField):
method getfield (line 1852) | def getfield(self, pkt, s):
class BGPPAExtComms (line 1866) | class BGPPAExtComms(Packet):
class MPReachNLRIPacketListField (line 1881) | class MPReachNLRIPacketListField(PacketListField):
method getfield (line 1888) | def getfield(self, pkt, s):
class BGPPAMPReachNLRI (line 1907) | class BGPPAMPReachNLRI(Packet):
method post_build (line 1931) | def post_build(self, p, pay):
class BGPPAMPUnreachNLRI_IPv6 (line 1942) | class BGPPAMPUnreachNLRI_IPv6(Packet):
class MPUnreachNLRIPacketField (line 1951) | class MPUnreachNLRIPacketField(PacketField):
method m2i (line 1957) | def m2i(self, pkt, m):
class BGPPAMPUnreachNLRI (line 1968) | class BGPPAMPUnreachNLRI(Packet):
method post_build (line 1980) | def post_build(self, p, pay):
class BGPPAAS4Path (line 1991) | class BGPPAAS4Path(Packet):
method post_build (line 2008) | def post_build(self, p, pay):
class BGPLargeCommunitySegment (line 2020) | class BGPLargeCommunitySegment(Packet):
class BGPPALargeCommunity (line 2033) | class BGPPALargeCommunity(Packet):
class BGPPAAS4Aggregator (line 2047) | class BGPPAAS4Aggregator(Packet):
class _PathAttrPacketField (line 2079) | class _PathAttrPacketField(PacketField):
method m2i (line 2084) | def m2i(self, pkt, m):
class BGPPathAttr (line 2109) | class BGPPathAttr(Packet):
method post_build (line 2141) | def post_build(self, p, pay):
class BGPUpdate (line 2203) | class BGPUpdate(BGP):
method post_build (line 2239) | def post_build(self, p, pay):
class BGPNotification (line 2353) | class BGPNotification(BGP):
function _update_orf_afi_safi (line 2400) | def _update_orf_afi_safi(afi, safi):
class BGPORFEntry (line 2413) | class BGPORFEntry(Packet):
method __init__ (line 2427) | def __init__(self, *args, **kwargs):
class _ORFNLRIPacketField (line 2433) | class _ORFNLRIPacketField(PacketField):
method m2i (line 2438) | def m2i(self, pkt, m):
class BGPORFAddressPrefix (line 2455) | class BGPORFAddressPrefix(BGPORFEntry):
class BGPORFCoveringPrefix (line 2471) | class BGPORFCoveringPrefix(BGPORFEntry):
class BGPORFEntryPacketListField (line 2490) | class BGPORFEntryPacketListField(PacketListField):
method m2i (line 2495) | def m2i(self, pkt, m):
method getfield (line 2517) | def getfield(self, pkt, s):
class BGPORF (line 2578) | class BGPORF(Packet):
class BGPRouteRefresh (line 2609) | class BGPRouteRefresh(BGP):
FILE: scapy/contrib/bier.py
class BIERLength (line 15) | class BIERLength:
class BIFT (line 29) | class BIFT(Packet):
class BIER (line 39) | class BIER(Packet):
FILE: scapy/contrib/bp.py
class BP (line 26) | class BP(Packet):
method mysummary (line 49) | def mysummary(self):
class BPBLOCK (line 103) | class BPBLOCK(Packet):
method mysummary (line 112) | def mysummary(self):
FILE: scapy/contrib/cansocket_native.py
class NativeCANSocket (line 38) | class NativeCANSocket(SuperSocket):
method __init__ (line 54) | def __init__(self,
method recv_raw (line 131) | def recv_raw(self, x=CAN_MTU):
method send (line 159) | def send(self, x):
FILE: scapy/contrib/cansocket_python_can.py
class SocketMapper (line 45) | class SocketMapper(object):
method __init__ (line 49) | def __init__(self, bus, sockets):
method read_bus (line 70) | def read_bus(self):
method distribute (line 101) | def distribute(self, msgs):
class _SocketsPool (line 111) | class _SocketsPool(object):
method __init__ (line 113) | def __init__(self):
method internal_send (line 119) | def internal_send(self, sender, msg):
method multiplex_rx_packets (line 153) | def multiplex_rx_packets(self):
method register (line 176) | def register(self, socket, *args, **kwargs):
method unregister (line 233) | def unregister(self, socket):
class SocketWrapper (line 260) | class SocketWrapper(can_BusABC):
method __init__ (line 263) | def __init__(self, *args, **kwargs):
method _recv_internal (line 278) | def _recv_internal(self, timeout):
method send (line 302) | def send(self, msg, timeout=None):
method shutdown (line 311) | def shutdown(self):
class PythonCANSocket (line 320) | class PythonCANSocket(SuperSocket):
method __init__ (line 334) | def __init__(self, **kwargs):
method recv_raw (line 339) | def recv_raw(self, x=0xffff):
method send (line 355) | def send(self, x):
method select (line 376) | def select(sockets, remain=conf.recv_poll_rate):
method close (line 399) | def close(self):
FILE: scapy/contrib/carp.py
class CARP (line 20) | class CARP(Packet):
method post_build (line 39) | def post_build(self, pkt, pay):
method build_hmac_sha1 (line 45) | def build_hmac_sha1(self, pw=b'\x00' * 20, ip4l=[], ip6l=[]):
FILE: scapy/contrib/cdp.py
function _CDPGuessPayloadClass (line 100) | def _CDPGuessPayloadClass(p, **kargs):
class CDPMsgGeneric (line 117) | class CDPMsgGeneric(Packet):
method guess_payload_class (line 125) | def guess_payload_class(self, p):
class CDPMsgDeviceID (line 129) | class CDPMsgDeviceID(CDPMsgGeneric):
class CDPAddrRecord (line 139) | class CDPAddrRecord(Packet):
method guess_payload_class (line 149) | def guess_payload_class(self, p):
class CDPAddrRecordIPv4 (line 153) | class CDPAddrRecordIPv4(CDPAddrRecord):
class CDPAddrRecordIPv6 (line 163) | class CDPAddrRecordIPv6(CDPAddrRecord):
function _CDPGuessAddrRecord (line 173) | def _CDPGuessAddrRecord(p, **kargs):
class CDPMsgAddr (line 191) | class CDPMsgAddr(CDPMsgGeneric):
method post_build (line 199) | def post_build(self, pkt, pay):
class CDPMsgPortID (line 206) | class CDPMsgPortID(CDPMsgGeneric):
class CDPMsgCapabilities (line 223) | class CDPMsgCapabilities(CDPMsgGeneric):
class CDPMsgSoftwareVersion (line 230) | class CDPMsgSoftwareVersion(CDPMsgGeneric):
class CDPMsgPlatform (line 235) | class CDPMsgPlatform(CDPMsgGeneric):
class CDPMsgIPGateway (line 245) | class CDPMsgIPGateway(CDPMsgGeneric):
class CDPIPPrefix (line 253) | class CDPIPPrefix(Packet):
method guess_payload_class (line 259) | def guess_payload_class(self, p):
class CDPMsgIPPrefix (line 263) | class CDPMsgIPPrefix(CDPMsgGeneric):
class CDPMsgProtoHello (line 272) | class CDPMsgProtoHello(CDPMsgGeneric):
class CDPMsgVTPMgmtDomain (line 284) | class CDPMsgVTPMgmtDomain(CDPMsgGeneric):
class CDPMsgNativeVLAN (line 289) | class CDPMsgNativeVLAN(CDPMsgGeneric):
class CDPMsgDuplex (line 296) | class CDPMsgDuplex(CDPMsgGeneric):
class CDPMsgVoIPVLANReply (line 303) | class CDPMsgVoIPVLANReply(CDPMsgGeneric):
class CDPMsgVoIPVLANQuery (line 311) | class CDPMsgVoIPVLANQuery(CDPMsgGeneric):
class _CDPPowerField (line 324) | class _CDPPowerField(ShortField):
method i2repr (line 325) | def i2repr(self, pkt, x):
class CDPMsgPower (line 331) | class CDPMsgPower(CDPMsgGeneric):
class CDPMsgMTU (line 339) | class CDPMsgMTU(CDPMsgGeneric):
class CDPMsgTrustBitmap (line 347) | class CDPMsgTrustBitmap(CDPMsgGeneric):
class CDPMsgUntrustedPortCoS (line 354) | class CDPMsgUntrustedPortCoS(CDPMsgGeneric):
class CDPMsgMgmtAddr (line 361) | class CDPMsgMgmtAddr(CDPMsgAddr):
class CDPMsgPowerRequest (line 366) | class CDPMsgPowerRequest(CDPMsgGeneric):
class CDPMsgPowerAvailable (line 378) | class CDPMsgPowerAvailable(CDPMsgGeneric):
class CDPMsg (line 390) | class CDPMsg(CDPMsgGeneric):
class _CDPChecksum (line 399) | class _CDPChecksum:
method _check_len (line 400) | def _check_len(self, pkt):
method post_build (line 413) | def post_build(self, pkt, pay):
class CDPv2_HDR (line 421) | class CDPv2_HDR(_CDPChecksum, CDPMsgGeneric):
FILE: scapy/contrib/chdlc.py
class CHDLC (line 20) | class CHDLC(Packet):
class SLARP (line 27) | class SLARP(Packet):
FILE: scapy/contrib/coap.py
function _get_ext_field_size (line 88) | def _get_ext_field_size(val):
function _get_delta_ext_size (line 98) | def _get_delta_ext_size(pkt):
function _get_len_ext_size (line 102) | def _get_len_ext_size(pkt):
function _get_abs_val (line 106) | def _get_abs_val(val, ext_val):
function _get_opt_val_size (line 116) | def _get_opt_val_size(pkt):
class _CoAPOpt (line 120) | class _CoAPOpt(Packet):
method _populate_extended (line 128) | def _populate_extended(val):
method do_build (line 135) | def do_build(self):
method guess_payload_class (line 141) | def guess_payload_class(self, payload):
class _CoAPOptsField (line 148) | class _CoAPOptsField(StrField):
method i2h (line 151) | def i2h(self, pkt, x):
method getfield (line 155) | def getfield(self, pkt, s):
method m2i (line 162) | def m2i(self, pkt, x):
method i2m (line 174) | def i2m(self, pkt, x):
class _CoAPPaymark (line 194) | class _CoAPPaymark(StrField):
method i2h (line 196) | def i2h(self, pkt, x):
method getfield (line 199) | def getfield(self, pkt, s):
method m2i (line 203) | def m2i(self, pkt, x):
method i2m (line 208) | def i2m(self, pkt, x):
class CoAP (line 212) | class CoAP(Packet):
method getfieldval (line 226) | def getfieldval(self, attr):
method post_dissect (line 232) | def post_dissect(self, pay):
FILE: scapy/contrib/concox.py
class BCDStrFixedLenField (line 59) | class BCDStrFixedLenField(StrFixedLenField):
method i2h (line 60) | def i2h(self, pkt, x):
class CRX1NewPacketContent (line 66) | class CRX1NewPacketContent(Packet):
class CRX1New (line 279) | class CRX1New(Packet):
FILE: scapy/contrib/diameter.py
class I3BytesEnumField (line 50) | class I3BytesEnumField (X3BytesField, EnumField):
method __init__ (line 53) | def __init__(self, name, default, enum):
class I3FieldLenField (line 57) | class I3FieldLenField(X3BytesField, FieldLenField):
method __init__ (line 60) | def __init__(
method i2m (line 73) | def i2m(self, pkt, x):
class DRFlags (line 81) | class DRFlags (FlagsField):
method i2repr (line 82) | def i2repr(self, pkt, x):
class DRCode (line 102) | class DRCode (I3BytesEnumField):
method __init__ (line 103) | def __init__(self, name, default, enum):
method i2repr (line 111) | def i2repr(self, pkt, x):
class AVPFlags (line 123) | class AVPFlags (FlagsField):
method i2repr (line 124) | def i2repr(self, pkt, x):
class AVPVendor (line 143) | class AVPVendor (IntField):
method i2repr (line 144) | def i2repr(self, pkt, x):
class OctetString (line 215) | class OctetString (StrLenField):
method i2repr (line 216) | def i2repr(self, pkt, x):
class Integer32 (line 223) | class Integer32 (SignedIntField):
class Integer64 (line 227) | class Integer64 (Field):
method __init__ (line 228) | def __init__(self, name, default):
class Unsigned32 (line 232) | class Unsigned32 (IntField):
class Unsigned64 (line 236) | class Unsigned64 (LongField):
class Float32 (line 240) | class Float32 (IEEEFloatField):
class Float64 (line 244) | class Float64 (IEEEDoubleField):
class Address (line 253) | class Address (StrLenField):
method i2repr (line 254) | def i2repr(self, pkt, x):
method any2i (line 263) | def any2i(self, pkt, x):
class Time (line 277) | class Time (IntField):
method i2repr (line 278) | def i2repr(self, pkt, x):
class Enumerated (line 282) | class Enumerated (IntEnumField):
method i2repr (line 283) | def i2repr(self, pkt, x):
class IPFilterRule (line 290) | class IPFilterRule (StrLenField):
class Grouped (line 294) | class Grouped (StrLenField):
class QoSFilterRule (line 303) | class QoSFilterRule (StrLenField): # Defined in 4.1.1 of RFC7155
class ISDN (line 307) | class ISDN (StrLenField):
method i2repr (line 308) | def i2repr(self, pkt, x):
method any2i (line 318) | def any2i(self, pkt, x):
function GuessAvpType (line 349) | def GuessAvpType(p, **kargs):
class AVP_Generic (line 370) | class AVP_Generic (Packet):
method extract_padding (line 373) | def extract_padding(self, s):
method post_build (line 379) | def post_build(self, p, pay):
method show2 (line 386) | def show2(self):
function AVP (line 390) | def AVP(avpId, **fields):
class AVP_FL_NV (line 445) | class AVP_FL_NV (AVP_Generic):
class AVP_FL_V (line 454) | class AVP_FL_V (AVP_Generic):
class AVP_VL_NV (line 464) | class AVP_VL_NV (AVP_Generic):
class AVP_VL_V (line 474) | class AVP_VL_V (AVP_Generic):
class AVP_Unknown (line 485) | class AVP_Unknown (AVP_Generic):
class AVPV_StrLenField (line 502) | class AVPV_StrLenField (AVP_VL_V):
class AVPNV_StrLenField (line 509) | class AVPNV_StrLenField (AVP_VL_NV):
class AVPV_OctetString (line 516) | class AVPV_OctetString (AVP_VL_V):
class AVPNV_OctetString (line 523) | class AVPNV_OctetString (AVP_VL_NV):
class AVPV_Grouped (line 530) | class AVPV_Grouped (AVP_VL_V):
class AVPNV_Grouped (line 538) | class AVPNV_Grouped (AVP_VL_NV):
class AVPV_Unsigned32 (line 545) | class AVPV_Unsigned32 (AVP_FL_V):
class AVPNV_Unsigned32 (line 550) | class AVPNV_Unsigned32 (AVP_FL_NV):
class AVPV_Integer32 (line 555) | class AVPV_Integer32 (AVP_FL_V):
class AVPNV_Integer32 (line 560) | class AVPNV_Integer32 (AVP_FL_NV):
class AVPV_Unsigned64 (line 565) | class AVPV_Unsigned64 (AVP_FL_V):
class AVPNV_Unsigned64 (line 570) | class AVPNV_Unsigned64 (AVP_FL_NV):
class AVPV_Integer64 (line 575) | class AVPV_Integer64 (AVP_FL_V):
class AVPNV_Integer64 (line 580) | class AVPNV_Integer64 (AVP_FL_NV):
class AVPV_Time (line 585) | class AVPV_Time (AVP_FL_V):
class AVPNV_Time (line 590) | class AVPNV_Time (AVP_FL_NV):
class AVPV_Address (line 595) | class AVPV_Address (AVP_VL_V):
class AVPNV_Address (line 602) | class AVPNV_Address (AVP_VL_NV):
class AVPV_IPFilterRule (line 609) | class AVPV_IPFilterRule (AVP_VL_V):
class AVPNV_IPFilterRule (line 616) | class AVPNV_IPFilterRule (AVP_VL_NV):
class AVPV_QoSFilterRule (line 623) | class AVPV_QoSFilterRule (AVP_VL_V):
class AVPNV_QoSFilterRule (line 630) | class AVPNV_QoSFilterRule (AVP_VL_NV):
class AVP_0_258 (line 644) | class AVP_0_258 (AVP_FL_NV):
class AVP_0_266 (line 650) | class AVP_0_266 (AVP_FL_NV):
class AVP_0_268 (line 656) | class AVP_0_268 (AVP_FL_NV):
class AVP_0_298 (line 730) | class AVP_0_298 (AVP_FL_NV):
class AVP_10415_630 (line 819) | class AVP_10415_630 (AVP_FL_V):
class AVP_10415_701 (line 858) | class AVP_10415_701 (AVP_VL_V):
class AVP_10415_1643 (line 864) | class AVP_10415_1643 (AVP_VL_V):
class AVP_0_6 (line 873) | class AVP_0_6 (AVP_FL_NV):
class AVP_0_7 (line 902) | class AVP_0_7 (AVP_FL_NV):
class AVP_0_10 (line 926) | class AVP_0_10 (AVP_FL_NV):
class AVP_0_13 (line 940) | class AVP_0_13 (AVP_FL_NV):
class AVP_0_15 (line 950) | class AVP_0_15 (AVP_FL_NV):
class AVP_0_45 (line 968) | class AVP_0_45 (AVP_FL_NV):
class AVP_0_61 (line 977) | class AVP_0_61 (AVP_FL_NV):
class AVP_0_64 (line 1022) | class AVP_0_64 (AVP_FL_NV):
class AVP_0_65 (line 1045) | class AVP_0_65 (AVP_FL_NV):
class AVP_0_72 (line 1070) | class AVP_0_72 (AVP_FL_NV):
class AVP_0_76 (line 1083) | class AVP_0_76 (AVP_FL_NV):
class AVP_0_261 (line 1092) | class AVP_0_261 (AVP_FL_NV):
class AVP_0_271 (line 1109) | class AVP_0_271 (AVP_FL_NV):
class AVP_0_273 (line 1118) | class AVP_0_273 (AVP_FL_NV):
class AVP_0_274 (line 1124) | class AVP_0_274 (AVP_FL_NV):
class AVP_0_277 (line 1132) | class AVP_0_277 (AVP_FL_NV):
class AVP_0_285 (line 1138) | class AVP_0_285 (AVP_FL_NV):
class AVP_0_295 (line 1144) | class AVP_0_295 (AVP_FL_NV):
class AVP_0_345 (line 1164) | class AVP_0_345 (AVP_FL_NV):
class AVP_0_346 (line 1171) | class AVP_0_346 (AVP_FL_NV):
class AVP_0_375 (line 1178) | class AVP_0_375 (AVP_FL_NV):
class AVP_0_377 (line 1202) | class AVP_0_377 (AVP_FL_NV):
class AVP_0_384 (line 1209) | class AVP_0_384 (AVP_FL_NV):
class AVP_0_387 (line 1225) | class AVP_0_387 (AVP_FL_NV):
class AVP_0_392 (line 1233) | class AVP_0_392 (AVP_FL_NV):
class AVP_0_403 (line 1241) | class AVP_0_403 (AVP_FL_NV):
class AVP_0_406 (line 1248) | class AVP_0_406 (AVP_FL_NV):
class AVP_0_416 (line 1256) | class AVP_0_416 (AVP_FL_NV):
class AVP_0_418 (line 1264) | class AVP_0_418 (AVP_FL_NV):
class AVP_0_422 (line 1270) | class AVP_0_422 (AVP_FL_NV):
class AVP_0_426 (line 1277) | class AVP_0_426 (AVP_FL_NV):
class AVP_0_427 (line 1283) | class AVP_0_427 (AVP_FL_NV):
class AVP_0_428 (line 1291) | class AVP_0_428 (AVP_FL_NV):
class AVP_0_433 (line 1298) | class AVP_0_433 (AVP_FL_NV):
class AVP_0_436 (line 1304) | class AVP_0_436 (AVP_FL_NV):
class AVP_0_449 (line 1312) | class AVP_0_449 (AVP_FL_NV):
class AVP_0_450 (line 1318) | class AVP_0_450 (AVP_FL_NV):
class AVP_0_452 (line 1335) | class AVP_0_452 (AVP_FL_NV):
class AVP_0_454 (line 1343) | class AVP_0_454 (AVP_FL_NV):
class AVP_0_455 (line 1361) | class AVP_0_455 (AVP_FL_NV):
class AVP_0_459 (line 1369) | class AVP_0_459 (AVP_FL_NV):
class AVP_0_480 (line 1377) | class AVP_0_480 (AVP_FL_NV):
class AVP_0_483 (line 1385) | class AVP_0_483 (AVP_FL_NV):
class AVP_0_494 (line 1393) | class AVP_0_494 (AVP_FL_NV):
class AVP_0_513 (line 1400) | class AVP_0_513 (AVP_FL_NV):
class AVP_0_514 (line 1408) | class AVP_0_514 (AVP_FL_NV):
class AVP_0_517 (line 1415) | class AVP_0_517 (AVP_FL_NV):
class AVP_0_534 (line 1422) | class AVP_0_534 (AVP_FL_NV):
class AVP_0_535 (line 1429) | class AVP_0_535 (AVP_FL_NV):
class AVP_0_536 (line 1462) | class AVP_0_536 (AVP_FL_NV):
class AVP_0_538 (line 1469) | class AVP_0_538 (AVP_FL_NV):
class AVP_0_541 (line 1507) | class AVP_0_541 (AVP_FL_NV):
class AVP_0_546 (line 1529) | class AVP_0_546 (AVP_FL_NV):
class AVP_0_547 (line 1556) | class AVP_0_547 (AVP_FL_NV):
class AVP_0_570 (line 1563) | class AVP_0_570 (AVP_FL_NV):
class AVP_0_575 (line 1570) | class AVP_0_575 (AVP_FL_NV):
class AVP_10415_500 (line 1587) | class AVP_10415_500 (AVP_FL_V):
class AVP_10415_511 (line 1599) | class AVP_10415_511 (AVP_FL_V):
class AVP_10415_512 (line 1607) | class AVP_10415_512 (AVP_FL_V):
class AVP_10415_513 (line 1613) | class AVP_10415_513 (AVP_FL_V):
class AVP_10415_520 (line 1636) | class AVP_10415_520 (AVP_FL_V):
class AVP_10415_523 (line 1653) | class AVP_10415_523 (AVP_FL_V):
class AVP_10415_527 (line 1661) | class AVP_10415_527 (AVP_FL_V):
class AVP_10415_529 (line 1669) | class AVP_10415_529 (AVP_FL_V):
class AVP_10415_533 (line 1676) | class AVP_10415_533 (AVP_FL_V):
class AVP_10415_536 (line 1682) | class AVP_10415_536 (AVP_FL_V):
class AVP_10415_614 (line 1689) | class AVP_10415_614 (AVP_FL_V):
class AVP_10415_616 (line 1715) | class AVP_10415_616 (AVP_FL_V):
class AVP_10415_623 (line 1728) | class AVP_10415_623 (AVP_FL_V):
class AVP_10415_624 (line 1736) | class AVP_10415_624 (AVP_FL_V):
class AVP_10415_633 (line 1744) | class AVP_10415_633 (AVP_FL_V):
class AVP_10415_638 (line 1751) | class AVP_10415_638 (AVP_FL_V):
class AVP_10415_648 (line 1757) | class AVP_10415_648 (AVP_FL_V):
class AVP_10415_650 (line 1765) | class AVP_10415_650 (AVP_FL_V):
class AVP_10415_652 (line 1773) | class AVP_10415_652 (AVP_FL_V):
class AVP_10415_703 (line 1781) | class AVP_10415_703 (AVP_FL_V):
class AVP_10415_705 (line 1825) | class AVP_10415_705 (AVP_FL_V):
class AVP_10415_706 (line 1832) | class AVP_10415_706 (AVP_FL_V):
class AVP_10415_707 (line 1839) | class AVP_10415_707 (AVP_FL_V):
class AVP_10415_708 (line 1847) | class AVP_10415_708 (AVP_FL_V):
class AVP_10415_710 (line 1863) | class AVP_10415_710 (AVP_FL_V):
class AVP_10415_712 (line 1869) | class AVP_10415_712 (AVP_FL_V):
class AVP_10415_714 (line 1876) | class AVP_10415_714 (AVP_FL_V):
class AVP_10415_717 (line 1883) | class AVP_10415_717 (AVP_FL_V):
class AVP_10415_718 (line 1889) | class AVP_10415_718 (AVP_FL_V):
class AVP_10415_829 (line 1897) | class AVP_10415_829 (AVP_FL_V):
class AVP_10415_862 (line 1903) | class AVP_10415_862 (AVP_FL_V):
class AVP_10415_864 (line 1931) | class AVP_10415_864 (AVP_FL_V):
class AVP_10415_867 (line 1937) | class AVP_10415_867 (AVP_FL_V):
class AVP_10415_870 (line 1944) | class AVP_10415_870 (AVP_FL_V):
class AVP_10415_872 (line 1990) | class AVP_10415_872 (AVP_FL_V):
class AVP_10415_882 (line 2011) | class AVP_10415_882 (AVP_FL_V):
class AVP_10415_883 (line 2017) | class AVP_10415_883 (AVP_FL_V):
class AVP_10415_884 (line 2023) | class AVP_10415_884 (AVP_FL_V):
class AVP_10415_899 (line 2039) | class AVP_10415_899 (AVP_FL_V):
class AVP_10415_902 (line 2059) | class AVP_10415_902 (AVP_FL_V):
class AVP_10415_906 (line 2066) | class AVP_10415_906 (AVP_FL_V):
class AVP_10415_907 (line 2073) | class AVP_10415_907 (AVP_FL_V):
class AVP_10415_921 (line 2080) | class AVP_10415_921 (AVP_FL_V):
class AVP_10415_922 (line 2087) | class AVP_10415_922 (AVP_FL_V):
class AVP_10415_1000 (line 2093) | class AVP_10415_1000 (AVP_FL_V):
class AVP_10415_1006 (line 2099) | class AVP_10415_1006 (AVP_FL_V):
class AVP_10415_1007 (line 2159) | class AVP_10415_1007 (AVP_FL_V):
class AVP_10415_1008 (line 2165) | class AVP_10415_1008 (AVP_FL_V):
class AVP_10415_1009 (line 2171) | class AVP_10415_1009 (AVP_FL_V):
class AVP_10415_1011 (line 2177) | class AVP_10415_1011 (AVP_FL_V):
class AVP_10415_1015 (line 2185) | class AVP_10415_1015 (AVP_FL_V):
class AVP_10415_1019 (line 2192) | class AVP_10415_1019 (AVP_FL_V):
class AVP_10415_1021 (line 2198) | class AVP_10415_1021 (AVP_FL_V):
class AVP_10415_1023 (line 2204) | class AVP_10415_1023 (AVP_FL_V):
class AVP_10415_1024 (line 2211) | class AVP_10415_1024 (AVP_FL_V):
class AVP_10415_1027 (line 2217) | class AVP_10415_1027 (AVP_FL_V):
class AVP_10415_1028 (line 2233) | class AVP_10415_1028 (AVP_FL_V):
class AVP_10415_1032 (line 2254) | class AVP_10415_1032 (AVP_FL_V):
class AVP_10415_1045 (line 2274) | class AVP_10415_1045 (AVP_FL_V):
class AVP_10415_1047 (line 2282) | class AVP_10415_1047 (AVP_FL_V):
class AVP_10415_1048 (line 2290) | class AVP_10415_1048 (AVP_FL_V):
class AVP_10415_1062 (line 2298) | class AVP_10415_1062 (AVP_FL_V):
class AVP_10415_1063 (line 2306) | class AVP_10415_1063 (AVP_FL_V):
class AVP_10415_1068 (line 2313) | class AVP_10415_1068 (AVP_FL_V):
class AVP_10415_1069 (line 2319) | class AVP_10415_1069 (AVP_FL_V):
class AVP_10415_1070 (line 2326) | class AVP_10415_1070 (AVP_FL_V):
class AVP_10415_1071 (line 2333) | class AVP_10415_1071 (AVP_FL_V):
class AVP_10415_1072 (line 2348) | class AVP_10415_1072 (AVP_FL_V):
class AVP_10415_1073 (line 2355) | class AVP_10415_1073 (AVP_FL_V):
class AVP_10415_1080 (line 2362) | class AVP_10415_1080 (AVP_FL_V):
class AVP_10415_1086 (line 2368) | class AVP_10415_1086 (AVP_FL_V):
class AVP_10415_1099 (line 2374) | class AVP_10415_1099 (AVP_FL_V):
class AVP_10415_1204 (line 2381) | class AVP_10415_1204 (AVP_FL_V):
class AVP_10415_1208 (line 2388) | class AVP_10415_1208 (AVP_FL_V):
class
Copy disabled (too large)
Download .json
Condensed preview — 773 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,180K chars).
[
{
"path": ".config/ci/install.ps1",
"chars": 686,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n\n# In"
},
{
"path": ".config/ci/install.sh",
"chars": 1390,
"preview": "#!/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more info"
},
{
"path": ".config/ci/openldap/config.ldif",
"chars": 693,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n\n# Contains the configuration of our OpenLDAP test "
},
{
"path": ".config/ci/openldap/install.sh",
"chars": 1630,
"preview": "#!/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more info"
},
{
"path": ".config/ci/openldap/testdata.ldif",
"chars": 1456,
"preview": "# SPDX-License-Identifier: OLDAP-2.8\n# This file is based on https://git.openldap.org/openldap/openldap/-/blob/master/te"
},
{
"path": ".config/ci/openssl.py",
"chars": 1049,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": ".config/ci/test.ps1",
"chars": 681,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n\n# te"
},
{
"path": ".config/ci/test.sh",
"chars": 3121,
"preview": "#!/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more info"
},
{
"path": ".config/ci/windows/InstallNpcap.ps1",
"chars": 2971,
"preview": "# Install Npcap on the machine.\n\n# Config:\n$npcap_oem_file = \"npcap-1.60-oem.exe\"\n$npcap_oem_hash = \"91e076eb9a197d55ca5"
},
{
"path": ".config/ci/windows/InstallWindumpNpcap.ps1",
"chars": 1086,
"preview": "# Config\n$urlPath = \"https://github.com/hsluoyz/WinDump/releases/download/v0.3/WinDump-for-Npcap-0.3.zip\"\n$checksum = \"4"
},
{
"path": ".config/ci/zipapp.sh",
"chars": 2083,
"preview": "#!/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more info"
},
{
"path": ".config/codespell_ignore.txt",
"chars": 361,
"preview": "abd\naci\nans\napplikation\narchtypes\nba\nbrowseable\nbyteorder\ncace\ncas\nciph\ncomponet\ncomversion\ncros\ndelt\ndoas\ndoubleclick\ne"
},
{
"path": ".config/mypy/mypy.ini",
"chars": 657,
"preview": "[mypy]\n\n# Internal Scapy modules that we ignore\n\n[mypy-scapy.libs.winpcapy]\nignore_errors = True\nignore_missing_imports "
},
{
"path": ".config/mypy/mypy_check.py",
"chars": 3199,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": ".config/mypy/mypy_deployment_stats.py",
"chars": 1683,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": ".config/mypy/mypy_enabled.txt",
"chars": 2704,
"preview": "# This file registers all files that have already been processed as part of\n# https://github.com/secdev/scapy/issues/215"
},
{
"path": ".git-blame-ignore-revs",
"chars": 2132,
"preview": "# This file contains the list of commits that should be excluded from\n# git blame. Read more informations on:\n# https://"
},
{
"path": ".gitattributes",
"chars": 64,
"preview": "scapy/__init__.py\texport-subst\n* text=auto\n*.bat text eol=crlf \n"
},
{
"path": ".github/FUNDING.yml",
"chars": 44,
"preview": "github: [gpotter2, guedou, p-l-, polybassa]\n"
},
{
"path": ".github/ISSUE_TEMPLATE/BUGS.yml",
"chars": 2751,
"preview": "name: Bug Report\ndescription: File a bug report\nbody:\n - type: markdown\n attributes:\n value: |\n ### Thin"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 161,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: Ask a question\n url: https://gitter.im/secdev/scapy\n about: Pl"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 945,
"preview": "<!-- This is just a checklist to guide you. Please remove it if you check all items. -->\n\n**Checklist:**\n\n- [ ] If you"
},
{
"path": ".github/codecov.yml",
"chars": 672,
"preview": "codecov:\n notify:\n # Do not send notifications when CI fails\n require_ci_to_pass: true\n\ncomment:\n # Define codev"
},
{
"path": ".github/workflows/cifuzz.yml",
"chars": 984,
"preview": "name: CIFuzz\n\non:\n push:\n branches: [master]\n\npermissions:\n contents: read\n\njobs:\n Fuzzing:\n runs-on: ubuntu-la"
},
{
"path": ".github/workflows/unittests.yml",
"chars": 6100,
"preview": "name: Scapy unit tests\n\non:\n push:\n branches: [master]\n pull_request:\n # The branches below must be a subset of "
},
{
"path": ".gitignore",
"chars": 194,
"preview": "*.pyc\n*.pyo\ndist/\nbuild/\nMANIFEST\n*.egg-info/\ntest/*.html\n.coverage*\ncoverage.xml\n.tox\n.ipynb_checkpoints\n.mypy_cache\n.v"
},
{
"path": ".packit.yml",
"chars": 2536,
"preview": "---\n# Docs: https://packit.dev/docs\n\nspecfile_path: .packit_rpm/scapy.spec\nfiles_to_sync:\n - .packit.yml\n - src: .pack"
},
{
"path": ".readthedocs.yml",
"chars": 617,
"preview": "# Readthedocs config file.\n\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html#supported-settings\n\nversion:"
},
{
"path": ".travis.yml",
"chars": 414,
"preview": "language: python\ndist: bionic # OpenSSL 1.1.1\ncache:\n directories:\n - $HOME/.cache/pip\n - .tox\n\njobs:\n include:\n "
},
{
"path": "CONTRIBUTING.md",
"chars": 6256,
"preview": "# How to contribute\n\nContributors are essential to Scapy (as they are to most open source\nprojects). Here is some advice"
},
{
"path": "LICENSE",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "MANIFEST.in",
"chars": 65,
"preview": "include MANIFEST.in\ninclude LICENSE\ninclude run_scapy\nprune test\n"
},
{
"path": "README.md",
"chars": 4621,
"preview": "<!-- start_ppi_description -->\n\n# <img src=\"https://github.com/secdev/scapy/raw/master/doc/scapy/graphics/scapy_logo.png"
},
{
"path": "doc/LICENSE",
"chars": 15469,
"preview": "Creative Commons Attribution-NonCommercial-ShareAlike 2.5\n\nCREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT P"
},
{
"path": "doc/notebooks/HTTP_2_Tuto.ipynb",
"chars": 241626,
"preview": "{\n \"metadata\": {\n \"name\": \"\",\n \"signature\": \"sha256:50ffc723dfcf9f5650b542c1b77933eeaa2df6f665494225ce2aba661b86885e\"\n"
},
{
"path": "doc/notebooks/Scapy in 15 minutes.ipynb",
"chars": 205090,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Scapy in 15 minutes (or longer)\"\n"
},
{
"path": "doc/notebooks/graphs-ipids.ipynb",
"chars": 58676,
"preview": "{\n \"metadata\": {\n \"name\": \"\"\n },\n \"nbformat\": 3,\n \"nbformat_minor\": 0,\n \"worksheets\": [\n {\n \"cells\": [\n {\n \"c"
},
{
"path": "doc/notebooks/tls/notebook1_x509.ipynb",
"chars": 6563,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Notebook 1: X.509 certificates\"\n "
},
{
"path": "doc/notebooks/tls/notebook2_tls_protected.ipynb",
"chars": 6158,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# TLS handshake overview\\n\",\n \"T"
},
{
"path": "doc/notebooks/tls/notebook3_tls_compromised.ipynb",
"chars": 8227,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# The lack of PFS: a danger to priv"
},
{
"path": "doc/notebooks/tls/notebook4_tls13.ipynb",
"chars": 5101,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# TLS 1.3 handshake overview\\n\",\n "
},
{
"path": "doc/notebooks/tls/raw_data/README.md",
"chars": 144,
"preview": "This folder is used in the notebook and in some tests.\n\nFiles in this folder are therefore cross licensed under both GPL"
},
{
"path": "doc/notebooks/tls/raw_data/pki/srv_cert.pem",
"chars": 1314,
"preview": "-----BEGIN CERTIFICATE-----\nMIIDnjCCAoagAwIBAgIJAP4EVw3HJ+n2MA0GCSqGSIb3DQEBCwUAMFQxCzAJBgNV\nBAYTAk1OMRQwEgYDVQQHDAtVbGF"
},
{
"path": "doc/notebooks/tls/raw_data/pki/srv_key.pem",
"chars": 1704,
"preview": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDM8fGbYC1grvKY\nDScp2cAJWUwPSjCoUt/lsSGfT8M"
},
{
"path": "doc/notebooks/tls/raw_data/tls_nss_example.keys.txt",
"chars": 1163,
"preview": "# SSL/TLS secrets log file, generated by OpenSSL\nCLIENT_RANDOM 216e876ea1a480c60145c4c80eb8d05c85b6806043105c391236cd4e8"
},
{
"path": "doc/notebooks/tls/raw_data/tls_session_13/cli_key.raw",
"chars": 32,
"preview": " !\"#$%&'()*+,-./0123456789:;<=>?"
},
{
"path": "doc/notebooks/tls/raw_data/tls_session_13/srv_key.raw",
"chars": 0,
"preview": ""
},
{
"path": "doc/scapy/Makefile",
"chars": 602,
"preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS =\nSPHI"
},
{
"path": "doc/scapy/README",
"chars": 722,
"preview": "This folder includes source files (text and graphics) for Scapy's documentation,\nwhich is automatically built using Sphi"
},
{
"path": "doc/scapy/_ext/linkcode_res.py",
"chars": 3293,
"preview": "import inspect\nimport os\nimport sys\n\nimport scapy\n\n# -- Linkcode resolver ----------------------------------------------"
},
{
"path": "doc/scapy/_ext/scapy_doc.py",
"chars": 4620,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "doc/scapy/_static/_dummy",
"chars": 0,
"preview": ""
},
{
"path": "doc/scapy/_static/vethrelay.sh",
"chars": 2687,
"preview": "#!/bin/bash\n\n# Setup iptables for IP relay by creating an interface configured\n# to be the destination of TPROXY rules.\n"
},
{
"path": "doc/scapy/_templates/README.md",
"chars": 203,
"preview": "# Doc templates\n\nThis folder contains templates used to generate Scapy's doc. It contains:\n\n- apidoc templates: inherite"
},
{
"path": "doc/scapy/_templates/module.rst_t",
"chars": 172,
"preview": "{%- if show_headings %}\n{{- basename | e | heading }}\n\n{% endif -%}\n.. automodule:: {{ qualname }}\n{%- for option in aut"
},
{
"path": "doc/scapy/_templates/package.rst_t",
"chars": 1186,
"preview": "{%- macro automodule(modname, options) -%}\n.. automodule:: {{ modname }}\n{%- for option in options %}\n :{{ option }}:\n"
},
{
"path": "doc/scapy/advanced_usage/asn1_snmp.rst",
"chars": 27337,
"preview": "ASN.1 and SNMP\n==============\n\nWhat is ASN.1?\n--------------\n\n.. note::\n\n This is only my view on ASN.1, explained as "
},
{
"path": "doc/scapy/advanced_usage/automaton.rst",
"chars": 14332,
"preview": "Automata\n========\n\nScapy enables to create easily network automata. Scapy does not stick to a specific model like Moore "
},
{
"path": "doc/scapy/advanced_usage/cbor.rst",
"chars": 5192,
"preview": "CBOR\n====\n\nWhat is CBOR?\n-------------\n\n.. note::\n\n This section provides a practical introduction to CBOR from Scapy'"
},
{
"path": "doc/scapy/advanced_usage/fwdmachine.rst",
"chars": 5991,
"preview": "******************\nForwarding Machine\n******************\n\nScapy's ``ForwardMachine`` is a utility that allows to create "
},
{
"path": "doc/scapy/advanced_usage/index.rst",
"chars": 111,
"preview": ".. Advanced usage documentation\n\nAdvanced usage\n==============\n\n.. toctree::\n :glob:\n :titlesonly:\n \n *"
},
{
"path": "doc/scapy/advanced_usage/pipetools.rst",
"chars": 13189,
"preview": ".. _pipetools:\n\nPipeTools\n=========\n\nScapy's ``pipetool`` is a smart piping system allowing to perform complex stream da"
},
{
"path": "doc/scapy/backmatter.rst",
"chars": 497,
"preview": "\n*******\nCredits\n*******\n\nThe maintainers of Scapy are:\n - Pierre Lalet\n - Gabriel Potter (Lead maintainer)\n - Guilla"
},
{
"path": "doc/scapy/build_dissect.rst",
"chars": 40859,
"preview": "********************\nAdding new protocols\n********************\n\nAdding a new protocol (or more correctly: a new *layer*)"
},
{
"path": "doc/scapy/conf.py",
"chars": 5792,
"preview": "# -*- coding: utf-8 -*-\n#\n# Scapy documentation build configuration file, created by\n# sphinx-quickstart on Wed Mar 07 1"
},
{
"path": "doc/scapy/development.rst",
"chars": 16355,
"preview": "*****************\nScapy development\n*****************\n\nProject organization\n====================\n\nScapy development uses"
},
{
"path": "doc/scapy/extending.rst",
"chars": 4277,
"preview": "********************\nBuild your own tools\n********************\n\nYou can use Scapy to make your own automated tools. You "
},
{
"path": "doc/scapy/functions.rst",
"chars": 1168,
"preview": "***********************\nCalling Scapy functions\n***********************\n\nThis section provides some examples that show h"
},
{
"path": "doc/scapy/graphics/fwdmachine.drawio",
"chars": 10068,
"preview": "<mxfile host=\"Electron\" agent=\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/"
},
{
"path": "doc/scapy/index.rst",
"chars": 1151,
"preview": ".. Scapy documentation master file, created by sphinx-quickstart on Mon Sep 8 19:37:39 2008.\n You can adapt this file"
},
{
"path": "doc/scapy/installation.rst",
"chars": 12195,
"preview": ".. highlight:: sh\n\n*************************\nDownload and Installation\n*************************\n\nOverview\n========\n\n 0."
},
{
"path": "doc/scapy/introduction.rst",
"chars": 10541,
"preview": "************\nIntroduction\n************\n\n.. sectionauthor:: Philippe Biondi <phil at secdev.org>\n\nAbout Scapy\n==========="
},
{
"path": "doc/scapy/layers/automotive.rst",
"chars": 87118,
"preview": ".. note:: This document is under a `Creative Commons Attribution - Non-Commercial - Share Alike 2.5 <http://creativecomm"
},
{
"path": "doc/scapy/layers/bluetooth.rst",
"chars": 21257,
"preview": "*********\nBluetooth\n*********\n\n.. note::\n\n If you're new to using Scapy, start with the :doc:`usage documentation\n <"
},
{
"path": "doc/scapy/layers/dcerpc.rst",
"chars": 17493,
"preview": "DCE/RPC & [MS-RPCE]\n===================\n\n.. note:: DCE/RPC per `DCE/RPC 1.1 <https://pubs.opengroup.org/onlinepubs/96293"
},
{
"path": "doc/scapy/layers/dcom.rst",
"chars": 4899,
"preview": "[MS-DCOM]\n=========\n\nDCOM is a mechanism to manipulate COM objects remotely. It is in many ways just an extension over n"
},
{
"path": "doc/scapy/layers/dotnet.rst",
"chars": 639,
"preview": ".NET Protocols\n==============\n\nScapy implements a few .NET specific protocols. Those protocols are a bit uncommon, but i"
},
{
"path": "doc/scapy/layers/gssapi.rst",
"chars": 4899,
"preview": "GSSAPI\n======\n\nScapy provides access to various `Security Providers <https://learn.microsoft.com/en-us/windows-server/se"
},
{
"path": "doc/scapy/layers/http.rst",
"chars": 7250,
"preview": "HTTP\n====\n\nScapy supports the sending / receiving of HTTP packets natively.\n\nHTTP 1.X\n--------\n\n.. note::\n Support fo"
},
{
"path": "doc/scapy/layers/index.rst",
"chars": 95,
"preview": ".. Layer-specific documentation\n\nLayers\n======\n\n.. toctree::\n :glob:\n :titlesonly:\n \n *"
},
{
"path": "doc/scapy/layers/kerberos.rst",
"chars": 51083,
"preview": "Kerberos\n========\n\n.. note:: Kerberos per `RFC4120 <https://datatracker.ietf.org/doc/html/rfc6113.html>`_ + `RFC6113 <ht"
},
{
"path": "doc/scapy/layers/ldap.rst",
"chars": 9998,
"preview": "LDAP\n====\n\nScapy fully implements the LDAPv2 / LDAPv3 messages, in addition to a very basic :class:`~scapy.layers.ldap.L"
},
{
"path": "doc/scapy/layers/netflow.rst",
"chars": 3416,
"preview": "Netflow\n=======\n\nNetflow packets mainly comes in 3 versions::\n\n- ``Netflow V5``\n- ``Netflow V7``\n- ``Netflow V9 / V10 (I"
},
{
"path": "doc/scapy/layers/pnio.rst",
"chars": 5628,
"preview": "***************\nPROFINET IO RTC\n***************\n\nPROFINET IO is an industrial protocol composed of different layers such"
},
{
"path": "doc/scapy/layers/sctp.rst",
"chars": 1443,
"preview": "****\nSCTP\n****\n\nSCTP is a relatively young transport-layer protocol combining both TCP and UDP characteristics. The `RFC"
},
{
"path": "doc/scapy/layers/smb.rst",
"chars": 13781,
"preview": "SMB\n===\n\nScapy provides pretty good support for SMB 2/3 and very partial support of SMB1.\n\nYou can use the :class:`~scap"
},
{
"path": "doc/scapy/layers/tcp.rst",
"chars": 2064,
"preview": "TCP\n===\n\nScapy is based on a stimulus/response model. This model does not work\nwell for a TCP stack. On the other hand, "
},
{
"path": "doc/scapy/layers/tuntap.rst",
"chars": 6962,
"preview": "********************\nTUN / TAP Interfaces\n********************\n\n.. note::\n\n This module only works on BSD, Linux and "
},
{
"path": "doc/scapy/make.bat",
"chars": 809,
"preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sp"
},
{
"path": "doc/scapy/routing.rst",
"chars": 5679,
"preview": "*******************\nScapy network stack\n*******************\n\nScapy maintains its own network stack, which is independent"
},
{
"path": "doc/scapy/troubleshooting.rst",
"chars": 9005,
"preview": "***************\nTroubleshooting\n***************\n\nFAQ\n===\n\nI can't sniff/inject packets in monitor mode.\n----------------"
},
{
"path": "doc/scapy/usage.rst",
"chars": 78072,
"preview": "*****\nUsage\n*****\n\nStarting Scapy\n==============\n\nScapy's interactive shell is run in a terminal session. Root privilege"
},
{
"path": "doc/scapy.1",
"chars": 4951,
"preview": "\\\" SPDX-License-Identifier: GPL-2.0-only\n.TH SCAPY 1 \"March 24, 2024\"\n.SH NAME\nscapy \\- Interactive packet manipulation "
},
{
"path": "doc/syntax/vim_uts_syntax/ftdetect/filetype.vim",
"chars": 44,
"preview": "au BufRead,BufNewFile *.uts setfiletype uts\n"
},
{
"path": "doc/syntax/vim_uts_syntax/ftdetect/uts.vim",
"chars": 45,
"preview": "au BufRead,BufNewFile *.uts set filetype=uts\n"
},
{
"path": "doc/syntax/vim_uts_syntax/install.sh",
"chars": 662,
"preview": "#!/bin/bash\n\nif [[ $(pwd) != *\"doc/syntax/vim_uts_syntax\" ]]\nthen\n\techo \"Wrong current directory. Please call this scrip"
},
{
"path": "doc/syntax/vim_uts_syntax/syntax/uts.vim",
"chars": 14309,
"preview": "\" Vim syntax file\n\" Language:\tUTScapy\n\" Maintainer:\tNils Weiss <nils@we155.de>\n\" Last Change:\t2019 June 07\n\" Credits:\tNe"
},
{
"path": "doc/vagrant_ci/README.md",
"chars": 107,
"preview": "# Scapy Unit Tests\n\nThis directory contains a Vagrant setup to ease starting `tox` based Scapy unit\ntests.\n"
},
{
"path": "doc/vagrant_ci/Vagrantfile",
"chars": 763,
"preview": "# -*- mode: ruby -*-\n# vi: set ft=ruby :\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See htt"
},
{
"path": "doc/vagrant_ci/provision_freebsd.sh",
"chars": 539,
"preview": "#!/usr/local/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for"
},
{
"path": "doc/vagrant_ci/provision_netbsd.sh",
"chars": 668,
"preview": "#!/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more info"
},
{
"path": "doc/vagrant_ci/provision_openbsd.sh",
"chars": 534,
"preview": "#!/bin/bash\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more info"
},
{
"path": "pyproject.toml",
"chars": 2425,
"preview": "[build-system]\nrequires = [ \"setuptools>=62.0.0\" ]\nbuild-backend = \"setuptools.build_meta\"\n\n[project]\nname = \"scapy\"\ndyn"
},
{
"path": "run_scapy",
"chars": 270,
"preview": "#! /bin/sh\nDIR=$(dirname \"$0\")\nif [ -z \"$PYTHON\" ]\nthen\n PYTHON=${PYTHON:-python3}\nfi\n$PYTHON --version > /dev/null 2>&"
},
{
"path": "run_scapy.bat",
"chars": 503,
"preview": "@echo off\r\nsetlocal\r\nset PYTHONPATH=%~dp0\r\nREM shift will not work with %*\r\nset \"_args=%*\"\r\nIF \"%PYTHON%\" == \"\" set PYTH"
},
{
"path": "scapy/__init__.py",
"chars": 5221,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/__main__.py",
"chars": 391,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/all.py",
"chars": 1292,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/ansmachine.py",
"chars": 9406,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/__init__.py",
"chars": 4384,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/bpf/__init__.py",
"chars": 207,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/bpf/consts.py",
"chars": 1723,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/bpf/core.py",
"chars": 3923,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/bpf/pfroute.py",
"chars": 36221,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/bpf/supersocket.py",
"chars": 20271,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/common.py",
"chars": 4232,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/libpcap.py",
"chars": 25032,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/linux/__init__.py",
"chars": 15436,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/linux/rtnetlink.py",
"chars": 29692,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/solaris.py",
"chars": 1094,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/unix.py",
"chars": 13022,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/windows/__init__.py",
"chars": 36470,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/windows/native.py",
"chars": 9273,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/arch/windows/structures.py",
"chars": 18547,
"preview": "# SPDX-License-Identifier: GPL-2.0-or-later\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n#"
},
{
"path": "scapy/as_resolvers.py",
"chars": 4566,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/asn1/__init__.py",
"chars": 213,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/asn1/asn1.py",
"chars": 23717,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/asn1/ber.py",
"chars": 22096,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/asn1/mib.py",
"chars": 27583,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/asn1fields.py",
"chars": 34914,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/asn1packet.py",
"chars": 1435,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/automaton.py",
"chars": 59824,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/autorun.py",
"chars": 8108,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/base_classes.py",
"chars": 18318,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/cbor/__init__.py",
"chars": 1873,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n\n\"\"\"\n"
},
{
"path": "scapy/cbor/cbor.py",
"chars": 14959,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n\n\"\"\"\n"
},
{
"path": "scapy/cbor/cborcodec.py",
"chars": 24461,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n\n\"\"\"\n"
},
{
"path": "scapy/compat.py",
"chars": 4370,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n\n\"\"\"\n"
},
{
"path": "scapy/config.py",
"chars": 40607,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/consts.py",
"chars": 990,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/__init__.py",
"chars": 300,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/altbeacon.py",
"chars": 2721,
"preview": "# SPDX-License-Identifier: GPL-2.0-or-later\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n#"
},
{
"path": "scapy/contrib/aoe.py",
"chars": 6197,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/__init__.py",
"chars": 390,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/autosar/__init__.py",
"chars": 290,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/autosar/pdu.py",
"chars": 1354,
"preview": "#! /usr/bin/env python\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ fo"
},
{
"path": "scapy/contrib/automotive/autosar/secoc.py",
"chars": 3255,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/autosar/secoc_canfd.py",
"chars": 3227,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/autosar/secoc_pdu.py",
"chars": 3608,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/bmw/__init__.py",
"chars": 284,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/bmw/definitions.py",
"chars": 337094,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/bmw/enumerator.py",
"chars": 1177,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/bmw/hsfz.py",
"chars": 8160,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/ccp.py",
"chars": 14346,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/doip.py",
"chars": 24083,
"preview": "#! /usr/bin/env python\n\n# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ fo"
},
{
"path": "scapy/contrib/automotive/ecu.py",
"chars": 26835,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/gm/__init__.py",
"chars": 283,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/gm/gmlan.py",
"chars": 24931,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/gm/gmlan_ecu_states.py",
"chars": 1597,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/gm/gmlan_logging.py",
"chars": 6689,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/gm/gmlan_scanner.py",
"chars": 30353,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/gm/gmlanutils.py",
"chars": 12833,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/kwp.py",
"chars": 29074,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/__init__.py",
"chars": 340,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/iid/__init__.py",
"chars": 340,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/iid/iids.py",
"chars": 5160,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/mid/__init__.py",
"chars": 340,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/mid/mids.py",
"chars": 24775,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/obd.py",
"chars": 4009,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/packet.py",
"chars": 361,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/__init__.py",
"chars": 340,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids.py",
"chars": 18756,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids_00_1F.py",
"chars": 9343,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids_20_3F.py",
"chars": 5411,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids_40_5F.py",
"chars": 8258,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids_60_7F.py",
"chars": 19043,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids_80_9F.py",
"chars": 7346,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/pid/pids_A0_C0.py",
"chars": 2932,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/scanner.py",
"chars": 10349,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/services.py",
"chars": 3710,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/tid/__init__.py",
"chars": 340,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/obd/tid/tids.py",
"chars": 4077,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/__init__.py",
"chars": 246,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/configuration.py",
"chars": 6637,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/enumerator.py",
"chars": 34725,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/executor.py",
"chars": 17954,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/graph.py",
"chars": 6280,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/staged_test_case.py",
"chars": 10508,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/scanner/test_case.py",
"chars": 9653,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/someip.py",
"chars": 17950,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/uds.py",
"chars": 56248,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/uds_ecu_states.py",
"chars": 3078,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/uds_logging.py",
"chars": 10039,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/uds_scan.py",
"chars": 54840,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/volkswagen/__init__.py",
"chars": 284,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/volkswagen/definitions.py",
"chars": 272648,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/xcp/__init__.py",
"chars": 294,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/xcp/cto_commands_master.py",
"chars": 14519,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/xcp/cto_commands_slave.py",
"chars": 16311,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
},
{
"path": "scapy/contrib/automotive/xcp/scanner.py",
"chars": 5881,
"preview": "# SPDX-License-Identifier: GPL-2.0-only\n# This file is part of Scapy\n# See https://scapy.net/ for more information\n# Cop"
}
]
// ... and 573 more files (download for full content)
About this extraction
This page contains the full source code of the secdev/scapy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 773 files (13.7 MB), approximately 3.6M tokens, and a symbol index with 14578 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.