diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:42:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:42:04 +0000 |
commit | 0d47952611198ef6b1163f366dc03922d20b1475 (patch) | |
tree | 3d840a3b8c0daef0754707bfb9f5e873b6b1ac13 /libnetutil/EthernetHeader.h | |
parent | Initial commit. (diff) | |
download | nmap-0d47952611198ef6b1163f366dc03922d20b1475.tar.xz nmap-0d47952611198ef6b1163f366dc03922d20b1475.zip |
Adding upstream version 7.94+git20230807.3be01efb1+dfsg.upstream/7.94+git20230807.3be01efb1+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | libnetutil/EthernetHeader.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/libnetutil/EthernetHeader.h b/libnetutil/EthernetHeader.h new file mode 100644 index 0000000..6052461 --- /dev/null +++ b/libnetutil/EthernetHeader.h @@ -0,0 +1,133 @@ +/*************************************************************************** + * EthernetHeader.h -- The EthernetHeader Class represents an Ethernet * + * header and footer. It contains methods to set the different header * + * fields. These methods tipically perform the necessary error checks and * + * byte order conversions. * + * * + ***********************IMPORTANT NMAP LICENSE TERMS************************ + * + * The Nmap Security Scanner is (C) 1996-2023 Nmap Software LLC ("The Nmap + * Project"). Nmap is also a registered trademark of the Nmap Project. + * + * This program is distributed under the terms of the Nmap Public Source + * License (NPSL). The exact license text applying to a particular Nmap + * release or source code control revision is contained in the LICENSE + * file distributed with that version of Nmap or source code control + * revision. More Nmap copyright/legal information is available from + * https://nmap.org/book/man-legal.html, and further information on the + * NPSL license itself can be found at https://nmap.org/npsl/ . This + * header summarizes some key points from the Nmap license, but is no + * substitute for the actual license text. + * + * Nmap is generally free for end users to download and use themselves, + * including commercial use. It is available from https://nmap.org. + * + * The Nmap license generally prohibits companies from using and + * redistributing Nmap in commercial products, but we sell a special Nmap + * OEM Edition with a more permissive license and special features for + * this purpose. See https://nmap.org/oem/ + * + * If you have received a written Nmap license agreement or contract + * stating terms other than these (such as an Nmap OEM license), you may + * choose to use and redistribute Nmap under those terms instead. + * + * The official Nmap Windows builds include the Npcap software + * (https://npcap.com) for packet capture and transmission. It is under + * separate license terms which forbid redistribution without special + * permission. So the official Nmap Windows builds may not be redistributed + * without special permission (such as an Nmap OEM license). + * + * Source is provided to this software because we believe users have a + * right to know exactly what a program is going to do before they run it. + * This also allows you to audit the software for security holes. + * + * Source code also allows you to port Nmap to new platforms, fix bugs, and add + * new features. You are highly encouraged to submit your changes as a Github PR + * or by email to the dev@nmap.org mailing list for possible incorporation into + * the main distribution. Unless you specify otherwise, it is understood that + * you are offering us very broad rights to use your submissions as described in + * the Nmap Public Source License Contributor Agreement. This is important + * because we fund the project by selling licenses with various terms, and also + * because the inability to relicense code has caused devastating problems for + * other Free Software projects (such as KDE and NASM). + * + * The free version of Nmap 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. Warranties, + * indemnification and commercial support are all available through the + * Npcap OEM program--see https://nmap.org/oem/ + * + ***************************************************************************/ +/* This code was originally part of the Nping tool. */ + +#ifndef ETHERNETHEADER_H +#define ETHERNETHEADER_H 1 + +#include "DataLinkLayerElement.h" + +/* Ether Types. (From RFC 5342 http://www.rfc-editor.org/rfc/rfc5342.txt) */ +#define ETHTYPE_IPV4 0x0800 /* Internet Protocol Version 4 */ +#define ETHTYPE_ARP 0x0806 /* Address Resolution Protocol */ +#define ETHTYPE_FRAMERELAY 0x0808 /* Frame Relay ARP */ +#define ETHTYPE_PPTP 0x880B /* Point-to-Point Tunneling Protocol */ +#define ETHTYPE_GSMP 0x880C /* General Switch Management Protocol */ +#define ETHTYPE_RARP 0x8035 /* Reverse Address Resolution Protocol */ +#define ETHTYPE_IPV6 0x86DD /* Internet Protocol Version 6 */ +#define ETHTYPE_MPLS 0x8847 /* MPLS */ +#define ETHTYPE_MPS_UAL 0x8848 /* MPLS with upstream-assigned label */ +#define ETHTYPE_MCAP 0x8861 /* Multicast Channel Allocation Protocol */ +#define ETHTYPE_PPPOE_D 0x8863 /* PPP over Ethernet Discovery Stage */ +#define ETHTYPE_PPOE_S 0x8864 /* PPP over Ethernet Session Stage */ +#define ETHTYPE_CTAG 0x8100 /* Customer VLAN Tag Type */ +#define ETHTYPE_EPON 0x8808 /* Ethernet Passive Optical Network */ +#define ETHTYPE_PBNAC 0x888E /* Port-based network access control */ +#define ETHTYPE_STAG 0x88A8 /* Service VLAN tag identifier */ +#define ETHTYPE_ETHEXP1 0x88B5 /* Local Experimental Ethertype */ +#define ETHTYPE_ETHEXP2 0x88B6 /* Local Experimental Ethertype */ +#define ETHTYPE_ETHOUI 0x88B7 /* OUI Extended Ethertype */ +#define ETHTYPE_PREAUTH 0x88C7 /* Pre-Authentication */ +#define ETHTYPE_LLDP 0x88CC /* Link Layer Discovery Protocol (LLDP) */ +#define ETHTYPE_MACSEC 0x88E5 /* Media Access Control Security */ +#define ETHTYPE_MVRP 0x88F5 /* Multiple VLAN Registration Protocol */ +#define ETHTYPE_MMRP 0x88F6 /* Multiple Multicast Registration Protocol */ +#define ETHTYPE_FRRR 0x890D /* Fast Roaming Remote Request */ + +#define ETH_HEADER_LEN 14 + +class EthernetHeader : public DataLinkLayerElement { + + private: + + struct nping_eth_hdr{ + u8 eth_dmac[6]; + u8 eth_smac[6]; + u16 eth_type; + }__attribute__((__packed__)); + + typedef struct nping_eth_hdr nping_eth_hdr_t; + + nping_eth_hdr_t h; + + public: + + EthernetHeader(); + ~EthernetHeader(); + void reset(); + u8 *getBufferPointer(); + int storeRecvData(const u8 *buf, size_t len); + int protocol_id() const; + int validate(); + int print(FILE *output, int detail) const; + + int setSrcMAC(const u8 *m); + const u8 *getSrcMAC() const; + + int setDstMAC(u8 *m); + const u8 *getDstMAC() const; + + int setEtherType(u16 val); + u16 getEtherType() const; + +}; + +#endif |