Files
omv_backup/venv/lib/python3.11/site-packages/getmac/__main__.py
2025-04-06 03:14:47 +02:00

124 lines
3.5 KiB
Python
Executable File

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import argparse
import logging
import sys
from . import getmac
def main(): # type: () -> None
parser = argparse.ArgumentParser(
"getmac",
description="Get the MAC address of system network "
"interfaces or remote hosts on the LAN",
)
parser.add_argument(
"--version", action="version", version="getmac %s" % getmac.__version__
)
parser.add_argument(
"-v", "--verbose", action="store_true", help="Enable output messages"
)
parser.add_argument(
"-d",
"--debug",
action="count",
help="Enable debugging output. Add characters to "
"increase verbosity of output, e.g. '-dd'.",
)
parser.add_argument(
"-N",
"--no-net",
"--no-network-requests",
action="store_true",
dest="NO_NET",
help="Do not use arping or send a UDP packet to refresh the ARP table",
)
parser.add_argument(
"--override-port",
type=int,
metavar="PORT",
help="Override the default UDP port used to refresh the ARP table "
"if network requests are enabled and arping is unavailable",
)
parser.add_argument(
"--override-platform",
type=str,
default=None,
metavar="PLATFORM",
help="Override the platform detection with the given value "
"(e.g. 'linux', 'windows', 'freebsd', etc.'). "
"Any values returned by platform.system() are valid.",
)
parser.add_argument(
"--force-method",
type=str,
default=None,
metavar="METHOD",
help="Force a specific method to be used, e.g. 'IpNeighborShow'. "
"This will be used regardless of it's method type or platform "
"compatibility, and Method.test() will NOT be checked!",
)
group = parser.add_mutually_exclusive_group(required=False)
group.add_argument(
"-i",
"--interface",
type=str,
default=None,
help="Name of a network interface on the system",
)
group.add_argument(
"-4", "--ip", type=str, default=None, help="IPv4 address of a remote host"
)
group.add_argument(
"-6", "--ip6", type=str, default=None, help="IPv6 address of a remote host"
)
group.add_argument(
"-n", "--hostname", type=str, default=None, help="Hostname of a remote host"
)
args = parser.parse_args()
if args.debug or args.verbose:
logging.basicConfig(
format="%(levelname)-8s %(message)s", level=logging.DEBUG, stream=sys.stderr
)
if args.debug:
getmac.DEBUG = args.debug
if args.override_port:
port = int(args.override_port)
getmac.log.debug(
"Using UDP port %d (overriding the default port %d)", port, getmac.PORT
)
getmac.PORT = port
if args.override_platform:
getmac.OVERRIDE_PLATFORM = args.override_platform.strip().lower()
if args.force_method:
getmac.FORCE_METHOD = args.force_method.strip().lower()
mac = getmac.get_mac_address(
interface=args.interface,
ip=args.ip,
ip6=args.ip6,
hostname=args.hostname,
network_request=not args.NO_NET,
)
if mac is not None:
print(mac) # noqa: T001, T201
sys.exit(0) # Exit success!
else:
sys.exit(1) # Exit with error since it failed to find a MAC
if __name__ == "__main__":
main()