mac-adresse über cmdline setzen

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

mac-adresse über cmdline setzen

Beitrag von frankw » 11.11.2018 15:57:36

Hallo,

besteht eine Möglichkeit die MAC-Adresse eines interfaces (möglichst mit Angabe des Interface-namens) vom bootloader (u-boot) über die cmdline zu setzen?

ich habe die Seite mal durchgeschaut (und natürlich gegoogled), aber nichts passendes gefunden: https://www.kernel.org/doc/html/v4.14/a ... eters.html

Gruß Frank

Benutzeravatar
unitra
Beiträge: 638
Registriert: 15.06.2002 21:09:38
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.128.129.130

Re: mac-adresse über cmdline setzen

Beitrag von unitra » 11.11.2018 20:19:09

So eine Möglichkeit der Änderung der MAC Adresse über die kernel command line beim Booten besteht nicht.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: mac-adresse über cmdline setzen

Beitrag von mat6937 » 12.11.2018 09:33:04

frankw hat geschrieben: ↑ zum Beitrag ↑
11.11.2018 15:57:36
... vom bootloader (u-boot) über die cmdline zu setzen?
Warum ist es in deinem Fall wichtig oder erforderlich, dass das mit dem bootloader gesetzt wird?

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: mac-adresse über cmdline setzen

Beitrag von mat6937 » 12.11.2018 10:20:43

unitra hat geschrieben: ↑ zum Beitrag ↑
11.11.2018 20:19:09
... Änderung der MAC Adresse über die kernel command line beim Booten besteht nicht.
Ich denke das wird vom Treiber abhängig sein:
ether= [HW,NET] Ethernet cards parameters
This option is obsoleted by the "netdev=" option, which
has equivalent usage. See its documentation for details.
netdev= [NET] Network devices parameters
Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
Note that mem_start is often overloaded to mean
something different and driver-specific.
This usage is only documented in each driver source
file if at all.
https://www.kernel.org/doc/htmldocs/net ... dress.html

Beim PI z. B., geht es ja auch schon beim booten, mit einem Eintrag in der "/boot/cmdline.txt"-Datei:

Code: Alles auswählen

smsc95xx.macaddr=B8:27:EB:59:EB:25
it will override the default mac adress with the specified one.
https://elinux.org/RPi_cmdline.txt

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22355
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: mac-adresse über cmdline setzen

Beitrag von KBDCALLS » 12.11.2018 10:26:10

Macht auch keinen Sinn. Die ersten drei Bytes stehen für den Hersteller . die restlichen drei sind die Nummer der Karte. Und die werden Hersteller vergeben, und lassen sich auch nicht ändern, meines wissens nach.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: mac-adresse über cmdline setzen

Beitrag von mat6937 » 12.11.2018 10:36:51

KBDCALLS hat geschrieben: ↑ zum Beitrag ↑
12.11.2018 10:26:10
Macht auch keinen Sinn. ..., und lassen sich auch nicht ändern, meines wissens nach.
Es gibt Situationen in denen es Sinn macht und die lassen sich auch ändern.

Z. B., es gibt Internet-Provider die weisen öffentliche statische IPv4-Adressen (per DHCP oder ohne DHCP) zu, die an die MAC-Adresse des border device "gebunden" sind. Wenn man jetzt andere border devices an diesem Internet-Anschluss testen/betreiben will (... ohne jedesmal vom ISP zu verlangen die MAC-Adresse zu ändern bzw. anzupassen), kann man die MAC-Adresse spoofen.

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22355
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: mac-adresse über cmdline setzen

Beitrag von KBDCALLS » 12.11.2018 11:13:49

Mittlerweile hab ich zu dem Thema auch einiges gefunden.
Im Source Code des Kernels auch.
  • Code: Alles auswählen

     * int (*ndo_set_mac_address)(struct net_device *dev, void *addr);
     *      This function  is called when the Media Access Control address
     *      needs to be changed. If this interface is not defined, the
     *      MAC address can not be changed.
Hängt wohl auch davon ab ob das das beim Konfigurieren des Kernels aktiviert wurde.

Und das Programm Debianmacchanger
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: mac-adresse über cmdline setzen

Beitrag von mat6937 » 12.11.2018 11:47:08

KBDCALLS hat geschrieben: ↑ zum Beitrag ↑
12.11.2018 11:13:49
Und das Programm Debianmacchanger
Ja, und mit systemd.link geht es auch.

Aber die Art und Weise wie bzw. zu welchem Zeitpunkt man die MAC-Adresse des WAN-Interfaces (z. B. zum umgehen eines MAC-Adressen-Filters beim ISP) ändert bzw. ändern muss, kann auch von der Infrastruktur des ISP abhängig sein. Deshalb kann es erforderlich sein, die MAC-Adresse schon beim booten zu ändern.
Ich denke, mit dem macchanger (oder gleichwertig) wird so eine frühzeitige Änderung der MAC-Adresse nicht möglich sein.

pferdefreund
Beiträge: 3791
Registriert: 26.02.2009 14:35:56

Re: mac-adresse über cmdline setzen

Beitrag von pferdefreund » 12.11.2018 13:22:57

und wenn man das Netzwerkkabel bis nach dem Boot abzieht und dann erst einsteckt ? Dann hat die Karte ja schon die gefälschte Mac-Adresse.

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: mac-adresse über cmdline setzen

Beitrag von mat6937 » 12.11.2018 13:34:09

pferdefreund hat geschrieben: ↑ zum Beitrag ↑
12.11.2018 13:22:57
... dann erst einsteckt ? Dann hat die Karte ja schon die gefälschte Mac-Adresse.
Ja, für (kurze) Testzwecke wäre das auch OK bzw. möglich.

Man kann je feststellen, ob die gespoofte MAC-Adresse verwendet wird. Z. B. mit:

Code: Alles auswählen

tcpdump -c 10 -vvveni <WAN-Interface> arp and ether src or dst <gespoofte-MAC-Adresse>
(oder gleichwertig).

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: mac-adresse über cmdline setzen

Beitrag von frankw » 12.11.2018 18:28:14

mat6937 hat geschrieben: ↑ zum Beitrag ↑
12.11.2018 09:33:04
frankw hat geschrieben: ↑ zum Beitrag ↑
11.11.2018 15:57:36
... vom bootloader (u-boot) über die cmdline zu setzen?
Warum ist es in deinem Fall wichtig oder erforderlich, dass das mit dem bootloader gesetzt wird?
Mein board hat keine BIA (burned in address),es wird bei jedem boot eine neue generiert. Aktuell setze ich die im debian mit "ip",wenn ich aber netboot machen will brauche ich die mac schon im bootloader. Um sie nicht doppelt definieren zu müssen wäre es schön,wenn ich sie durchreichen könnte.

Aber wenn es nicht geht ist es halt so. Danke für die Antworten

In meinem Fall ist die MAC wichtig für den DHCP-Server und die Firewall

Benutzeravatar
smutbert
Moderator
Beiträge: 8318
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: mac-adresse über cmdline setzen

Beitrag von smutbert » 12.11.2018 18:41:49

Könntest du vielleicht irgendeine selbst ausgedachte Option an den Kernel hängen (die von keinem bereits vorhandenen Teil des Systems Verwendet/ausgewertet wird), wie zum Beispiel

Code: Alles auswählen

frankw.hardwareadresse=d4:10:cf:aa:13:b7
und die dann hinterher mit einem (etwa von systemd ausgeführten) Skript, das den Wert aus /proc (»/proc/cmdline«) ausliest, setzen?

mat6937
Beiträge: 2927
Registriert: 09.12.2014 10:44:00

Re: mac-adresse über cmdline setzen

Beitrag von mat6937 » 12.11.2018 18:57:48

frankw hat geschrieben: ↑ zum Beitrag ↑
12.11.2018 18:28:14
Aktuell setze ich die im debian mit "ip",wenn ich aber netboot machen will brauche ich die mac schon im bootloader. Um sie nicht doppelt definieren zu müssen wäre es schön,wenn ich sie durchreichen könnte.
Versuch mal mit ip in einer service-unit, wie z. B. hier, im Abschnitt "systemd unit" beschrieben.

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: mac-adresse über cmdline setzen

Beitrag von frankw » 12.11.2018 19:07:17

smutbert hat geschrieben: ↑ zum Beitrag ↑
12.11.2018 18:41:49
Könntest du vielleicht irgendeine selbst ausgedachte Option an den Kernel hängen (die von keinem bereits vorhandenen Teil des Systems Verwendet/ausgewertet wird), wie zum Beispiel

Code: Alles auswählen

frankw.hardwareadresse=d4:10:cf:aa:13:b7
und die dann hinterher mit einem (etwa von systemd ausgeführten) Skript, das den Wert aus /proc (»/proc/cmdline«) ausliest, setzen?
gibt es zufällig schon eine fertige parsing-routine, die ich nutzen könnte? sonst müsste ich das selbst basteln...wird bisschen kniffelig weil bei den optionen ja doppelte = vorkommen können (u.a. habe ich das bei der console-option mit drin)

mal fix zusammengeklimpert:

Code: Alles auswählen

 1 #!/bin/bash
 2
 3 echo $1
 4
 5 for option in $1
 6 do
 7     OLDIFS="$IFS"
 8     IFS='=' read -r -a array <<< "$option"
 9     IFS="$OLDIFS"
10
11     #echo "array:"${array[@]}
12     name=${array[0]}
13     val=${array[1]}
14
15     OLDIFS="$IFS"
16     IFS=',' read -r -a intf <<< "${array[1]}"
17     IFS="$OLDIFS"
18
19 echo "name:$name val:$val"
20
21 if [[ "$name" = "frank.ethaddr" ]];then
22
23 #echo ${intf[@]}
24
25     for conf in ${intf[@]}
26     do
27
28         OLDIFS="$IFS"
29         IFS=':' read -r -a mac <<< "$conf"
30         IFS="$OLDIFS"
31
32         interface=${mac[0]}
33         addr="${mac[1]}:${mac[2]}:${mac[3]}:${mac[4]}:${mac[5]}:${mac[6]}"
34
35         echo "int: $interface,mac: $addr"
36     done
37
38 fi
39
40 done

blah="test=123 frank.ethaddr=lan0:aa:bb:cc:dd:ee:ff,lan1:11:22:33:44:55:66"
./mac.sh "$blah"

test=123 frank.ethaddr=lan0:aa:bb:cc:dd:ee:ff,lan1:11:22:33:44:55:66
name:test val:123
name:frank.ethaddr val:lan0:aa:bb:cc:dd:ee:ff,lan1:11:22:33:44:55:66
int: lan0,mac: aa:bb:cc:dd:ee:ff
int: lan1,mac: 11:22:33:44:55:66
kommt aber noch nicht mit den evtl. doppelt vorhandenen "=" klar, also wenn sowas mit drin ist: console="earlyprintk console=tty1 fbcon=map:0 console=ttyS0,115200"

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22355
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: mac-adresse über cmdline setzen

Beitrag von KBDCALLS » 12.11.2018 19:35:29

Evetuell wirds du hier fündig was Kernelparameters anbertrifft


  • /usr/src/linux-source-4.18/Documentation/admin-guide
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

frankw
Beiträge: 154
Registriert: 24.10.2018 11:34:33

Re: mac-adresse über cmdline setzen

Beitrag von frankw » 14.11.2018 15:16:28

Das größere Problem ist das handling von leerzeichen innerhalb von " und '

Kanns ich diese irgendwie sauber verarbeiten? Also erstmal nur an den leerzeichen außerhalb splitten in der äußeren schleife...

Antworten