scapy.layers.netbios

NetBIOS over TCP/IP

[RFC 1001/1002]

class scapy.layers.netbios.NBNSHeader(_pkt, /, *, NAME_TRN_ID=0, RESPONSE=0, OPCODE=0, NM_FLAGS=<Flag 0 ()>, RCODE=0, QDCOUNT=0, ANCOUNT=0, NSCOUNT=0, ARCOUNT=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSHeader'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ShortField (NBNSHeader).NAME_TRN_ID>, <BitField (NBNSHeader).RESPONSE>, <BitField (NBNSHeader).OPCODE>, <FlagsField (NBNSHeader).NM_FLAGS>, <BitField (NBNSHeader).RCODE>, <ShortField (NBNSHeader).QDCOUNT>, <ShortField (NBNSHeader).ANCOUNT>, <ShortField (NBNSHeader).NSCOUNT>, <ShortField (NBNSHeader).ARCOUNT>]
hashret()[source]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({'NM_FLAGS': 17, 'OPCODE': 0, 'QDCOUNT': 1}, <class 'scapy.layers.netbios.NBNSQueryRequest'>), ({'ANCOUNT': 1, 'NM_FLAGS': 80, 'OPCODE': 0, 'RESPONSE': 1}, <class 'scapy.layers.netbios.NBNSQueryResponse'>), ({'ANCOUNT': 1, 'NM_FLAGS': 88, 'OPCODE': 0, 'RESPONSE': 1}, <class 'scapy.layers.netbios.NBNSQueryResponse'>), ({'ANCOUNT': 1, 'NM_FLAGS': 112, 'OPCODE': 0, 'RESPONSE': 1}, <class 'scapy.layers.netbios.NBNSQueryResponse'>), ({'ANCOUNT': 1, 'NM_FLAGS': 120, 'OPCODE': 0, 'RESPONSE': 1}, <class 'scapy.layers.netbios.NBNSQueryResponse'>), ({'NM_FLAGS': 0, 'OPCODE': 0, 'QDCOUNT': 1}, <class 'scapy.layers.netbios.NBNSNodeStatusRequest'>), ({'NM_FLAGS': 1, 'OPCODE': 0, 'QDCOUNT': 1}, <class 'scapy.layers.netbios.NBNSNodeStatusRequest'>), ({'ANCOUNT': 1, 'NM_FLAGS': 64, 'OPCODE': 0, 'RESPONSE': 1}, <class 'scapy.layers.netbios.NBNSNodeStatusResponse'>), ({'OPCODE': 5}, <class 'scapy.layers.netbios.NBNSRegistrationRequest'>), ({'ARCOUNT': 1, 'NM_FLAGS': 17, 'OPCODE': 5, 'QDCOUNT': 1}, <class 'scapy.layers.netbios.NBNSRegistrationRequest'>), ({'ANCOUNT': 1, 'NM_FLAGS': 64, 'OPCODE': 7, 'RESPONSE': 1}, <class 'scapy.layers.netbios.NBNSWackResponse'>)]
class scapy.layers.netbios.NBNSNodeStatusRequest(_pkt, /, *, QUESTION_NAME=b'*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', SUFFIX=16705, NULL=0, QUESTION_TYPE=33, QUESTION_CLASS=1)[source]

Bases: NBNSQueryRequest

aliastypes = [<class 'scapy.layers.netbios.NBNSNodeStatusRequest'>, <class 'scapy.layers.netbios.NBNSQueryRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<NetBIOSNameField (NBNSQueryRequest,NBNSNodeStatusRequest).QUESTION_NAME>, <ShortEnumField (NBNSQueryRequest,NBNSNodeStatusRequest).SUFFIX>, <ByteField (NBNSQueryRequest,NBNSNodeStatusRequest).NULL>, <ShortEnumField (NBNSQueryRequest,NBNSNodeStatusRequest).QUESTION_TYPE>, <ShortEnumField (NBNSQueryRequest,NBNSNodeStatusRequest).QUESTION_CLASS>]
mysummary()[source]
class scapy.layers.netbios.NBNSNodeStatusResponse(_pkt, /, *, RR_NAME=b'windows', SUFFIX=16705, NULL=0, RR_TYPE=33, RR_CLASS=1, TTL=0, RDLENGTH=83, NUM_NAMES=None, NODE_NAME=[<NBNSNodeStatusResponseService  |>], MAC_ADDRESS=None, STATISTICS=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSNodeStatusResponse'>, <class 'scapy.packet.Packet'>]
answers(other)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<NetBIOSNameField (NBNSNodeStatusResponse).RR_NAME>, <ShortEnumField (NBNSNodeStatusResponse).SUFFIX>, <ByteField (NBNSNodeStatusResponse).NULL>, <ShortEnumField (NBNSNodeStatusResponse).RR_TYPE>, <ShortEnumField (NBNSNodeStatusResponse).RR_CLASS>, <IntField (NBNSNodeStatusResponse).TTL>, <ShortField (NBNSNodeStatusResponse).RDLENGTH>, <FieldLenField (NBNSNodeStatusResponse).NUM_NAMES>, <PacketListField (NBNSNodeStatusResponse).NODE_NAME>, <SourceMACField (NBNSNodeStatusResponse).MAC_ADDRESS>, <XStrFixedLenField (NBNSNodeStatusResponse).STATISTICS>]
class scapy.layers.netbios.NBNSNodeStatusResponseService(_pkt, /, *, NETBIOS_NAME=b'WINDOWS         ', SUFFIX=0, NAME_FLAGS=4, UNUSED=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSNodeStatusResponseService'>, <class 'scapy.packet.Packet'>]
default_payload_class(payload)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<StrFixedLenField (NBNSNodeStatusResponseService).NETBIOS_NAME>, <ByteEnumField (NBNSNodeStatusResponseService).SUFFIX>, <ByteField (NBNSNodeStatusResponseService).NAME_FLAGS>, <ByteEnumField (NBNSNodeStatusResponseService).UNUSED>]
class scapy.layers.netbios.NBNSQueryRequest(_pkt, /, *, QUESTION_NAME=b'windows', SUFFIX=16705, NULL=0, QUESTION_TYPE=32, QUESTION_CLASS=1)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSQueryRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<NetBIOSNameField (NBNSQueryRequest,NBNSNodeStatusRequest).QUESTION_NAME>, <ShortEnumField (NBNSQueryRequest,NBNSNodeStatusRequest).SUFFIX>, <ByteField (NBNSQueryRequest,NBNSNodeStatusRequest).NULL>, <ShortEnumField (NBNSQueryRequest,NBNSNodeStatusRequest).QUESTION_TYPE>, <ShortEnumField (NBNSQueryRequest,NBNSNodeStatusRequest).QUESTION_CLASS>]
mysummary()[source]
class scapy.layers.netbios.NBNSQueryResponse(_pkt, /, *, RR_NAME=b'windows', SUFFIX=16705, NULL=0, QUESTION_TYPE=32, QUESTION_CLASS=1, TTL=300000, RDLENGTH=None, ADDR_ENTRY=[<NBNS_ADD_ENTRY  |>])[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSQueryResponse'>, <class 'scapy.packet.Packet'>]
answers(other)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<NetBIOSNameField (NBNSQueryResponse).RR_NAME>, <ShortEnumField (NBNSQueryResponse).SUFFIX>, <ByteField (NBNSQueryResponse).NULL>, <ShortEnumField (NBNSQueryResponse).QUESTION_TYPE>, <ShortEnumField (NBNSQueryResponse).QUESTION_CLASS>, <IntField (NBNSQueryResponse).TTL>, <FieldLenField (NBNSQueryResponse).RDLENGTH>, <PacketListField (NBNSQueryResponse).ADDR_ENTRY>]
mysummary()[source]
class scapy.layers.netbios.NBNSRegistrationRequest(_pkt, /, *, QUESTION_NAME=b'Windows', SUFFIX=16705, NULL=0, QUESTION_TYPE=32, QUESTION_CLASS=1, RR_NAME=49164, RR_TYPE=32, RR_CLASS=1, TTL=0, RDLENGTH=6, G=0, OWNER_NODE_TYPE=0, UNUSED=0, NB_ADDRESS='127.0.0.1')[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSRegistrationRequest'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<NetBIOSNameField (NBNSRegistrationRequest).QUESTION_NAME>, <ShortEnumField (NBNSRegistrationRequest).SUFFIX>, <ByteField (NBNSRegistrationRequest).NULL>, <ShortEnumField (NBNSRegistrationRequest).QUESTION_TYPE>, <ShortEnumField (NBNSRegistrationRequest).QUESTION_CLASS>, <ShortEnumField (NBNSRegistrationRequest).RR_NAME>, <ShortEnumField (NBNSRegistrationRequest).RR_TYPE>, <ShortEnumField (NBNSRegistrationRequest).RR_CLASS>, <IntField (NBNSRegistrationRequest).TTL>, <ShortField (NBNSRegistrationRequest).RDLENGTH>, <BitEnumField (NBNSRegistrationRequest).G>, <BitEnumField (NBNSRegistrationRequest).OWNER_NODE_TYPE>, <BitEnumField (NBNSRegistrationRequest).UNUSED>, <IPField (NBNSRegistrationRequest).NB_ADDRESS>]
mysummary()[source]
class scapy.layers.netbios.NBNSWackResponse(_pkt, /, *, RR_NAME=b'windows', SUFFIX=16705, NULL=0, RR_TYPE=32, RR_CLASS=1, TTL=2, RDLENGTH=2, RDATA=10512)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNSWackResponse'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<NetBIOSNameField (NBNSWackResponse).RR_NAME>, <ShortEnumField (NBNSWackResponse).SUFFIX>, <ByteField (NBNSWackResponse).NULL>, <ShortEnumField (NBNSWackResponse).RR_TYPE>, <ShortEnumField (NBNSWackResponse).RR_CLASS>, <IntField (NBNSWackResponse).TTL>, <ShortField (NBNSWackResponse).RDLENGTH>, <BitField (NBNSWackResponse).RDATA>]
class scapy.layers.netbios.NBNS_ADD_ENTRY(_pkt, /, *, G=0, OWNER_NODE_TYPE=0, UNUSED=0, NB_ADDRESS='127.0.0.1')[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBNS_ADD_ENTRY'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<BitEnumField (NBNS_ADD_ENTRY).G>, <BitEnumField (NBNS_ADD_ENTRY).OWNER_NODE_TYPE>, <BitEnumField (NBNS_ADD_ENTRY).UNUSED>, <IPField (NBNS_ADD_ENTRY).NB_ADDRESS>]
class scapy.layers.netbios.NBNS_am(self, server_name=None, from_ip=None, ip=None)[source]

Bases: AnsweringMachine

filter: str | None = 'udp port 137'
function_name = 'nbnsd'
is_request(req)[source]
make_reply(req: Packet) Packet[source]
parse_options(server_name=None, from_ip=None, ip=None)[source]

NBNS answering machine

Parameters:
  • server_name – the netbios server name to match

  • from_ip – an IP (can have a netmask) to filter on

  • ip – the IP to answer with

sniff_options: Dict[str, Any] = {'store': 0}
class scapy.layers.netbios.NBTDatagram(_pkt, /, *, Type=16, Flags=2, ID=0, SourceIP='127.0.0.1', SourcePort=138, Length=None, Offset=0, SourceName=b'windows', SUFFIX1=16705, NULL1=0, DestinationName=b'windows', SUFFIX2=16705, NULL2=0)[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NBTDatagram'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteField (NBTDatagram).Type>, <ByteField (NBTDatagram).Flags>, <ShortField (NBTDatagram).ID>, <IPField (NBTDatagram).SourceIP>, <ShortField (NBTDatagram).SourcePort>, <ShortField (NBTDatagram).Length>, <ShortField (NBTDatagram).Offset>, <NetBIOSNameField (NBTDatagram).SourceName>, <ShortEnumField (NBTDatagram).SUFFIX1>, <ByteField (NBTDatagram).NULL1>, <NetBIOSNameField (NBTDatagram).DestinationName>, <ShortEnumField (NBTDatagram).SUFFIX2>, <ByteField (NBTDatagram).NULL2>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.layers.smb._SMBGeneric'>)]
post_build(pkt, pay)[source]
class scapy.layers.netbios.NBTSession(_pkt, /, *, TYPE=0, RESERVED=0, LENGTH=None)[source]

Bases: Packet

MAXLENGTH = 262143
aliastypes = [<class 'scapy.layers.netbios.NBTSession'>, <class 'scapy.packet.Packet'>]
extract_padding(s)[source]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (NBTSession).TYPE>, <BitField (NBTSession).RESERVED>, <BitField (NBTSession).LENGTH>]
payload_guess: List[Tuple[Dict[str, Any], Type[Packet]]] = [({}, <class 'scapy.layers.smb._SMBGeneric'>)]
post_build(pkt, pay)[source]
classmethod tcp_reassemble(data, *args, **kwargs)[source]
class scapy.layers.netbios.NetBIOS_DS(_pkt, /, *, type=17, flags=0, id=0, src='127.0.0.1', sport=138, len=None, ofs=0, srcname=b'', dstname=b'')[source]

Bases: Packet

aliastypes = [<class 'scapy.layers.netbios.NetBIOS_DS'>, <class 'scapy.packet.Packet'>]
fields_desc: ClassVar[List[Field[Any, Any] | _FieldContainer]] = [<ByteEnumField (NetBIOS_DS).type>, <ByteField (NetBIOS_DS).flags>, <XShortField (NetBIOS_DS).id>, <IPField (NetBIOS_DS).src>, <ShortField (NetBIOS_DS).sport>, <ShortField (NetBIOS_DS).len>, <ShortField (NetBIOS_DS).ofs>, <NetBIOSNameField (NetBIOS_DS).srcname>, <NetBIOSNameField (NetBIOS_DS).dstname>]
post_build(p, pay)[source]
scapy.layers.netbios.nbns_resolve(qname: str, iface: NetworkInterface | str | List[NetworkInterface | str] = None, raw: bool = False, timeout: int = 3, **kwargs) List[str][source]

Perform a simple NBNS (NetBios Name Services) resolution with caching

Parameters:
  • qname – the name to query

  • iface – the interfaces to use. (default: all)

  • raw – return the whole netbios packet (default False)

  • timeout – seconds until timeout (per server)

Raises:

TimeoutError – if no DNS servers were reached in time.