• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Get host MAC via REST API inside container
#1
Hi all,

we need the MAC address of the host system inside a container on the Hilscher netPI.
For me it seemed to be a suitable solution to get the LAN settings, and also the MAC, from the Hilscher REST API.

As described in this thread, we first logged in with the admin user to get the authentication cookie.

Code:
curl -L -k -X POST 'https://<HOST-IP>/login' -H 'Content-Type: application/json' -d '{"username":"admin","password":"<PASSWORD>"}'


With the authentication cookie we are able to get various information from the API. The following requests all worked.
Code:
curl -L -k -X GET 'htps://<HOST-IP>/?page=infocenter' -H 'Cookie: <COOKIE>'

Code:
curl -L -k -X GET 'htps://<HOST-IP>/get/devicestatus/getCPUStatus' -H 'Cookie: <COOKIE>'

Code:
curl -L -k -X POST 'https://<HOST-IP>/system' --header 'Cookie: <COOKIE>; Content-Type: application/x-www-form-urlencoded' -d "argument=reboot"


But the request to get the LAN settings always responds the following:
Code:
{"status":"Failed","message":"Permission denied"}


Here's the request as we tried:
Code:
curl -L -k -X GET 'htps://<HOST-IP>/get/networksettings/lansettings' -H 'Cookie: <COOKIE>'

The admin user has all read & write rights in the application, also for the REST API.


Can anyone imagine what we are doing wrong here?

Is this a good way to get the MAC-address of the host system or is there a better solution?

Many thanks in advance.

Best regards
Benjamin
  Reply
#2
Well I would do it differently.

You need to know that the MAC address of a Raspberry Pi is starting always with B8:27:EB which is the vendor ID of the Raspberry Pi organization followed by the 6 last digits (3 bytes) of the serial number of Raspberry Pi CPU. This adds to 6 bytes

So with this knowledge you could easily build the MAC address your own without reading it across the web-UI.

This code below should help you to extract the CPU's serial number which should also work in a container I guess

Code:
cat /proc/cpuinfo |grep Serial|cut -d' ' -f2


Thx
Armin
You never fail until you stop trying.“, Albert Einstein (1879 - 1955)

  Reply
#3
Thanks a lot! This is a suitable approach for us, at least in the current version.
Is this structure of the MAC (OUI + last 3 bytes of the cpu serial nr.) a Raspberry or Hilscher speciality?
How about the netPI RTE module with multiple NICs?

Can you imagine why the GET request for LAN settings (see above) did not work?
We would like to use the REST API for other topics as well.

Best regards
Benjamin
  Reply
#4
Hi Benjamin,

the point with the MAC ID is common Raspberry Pi sense and not Hilscher specific. You can use google search to find several links where this is described.


As next I want to give you a hint how you can test any RESTful API yourself using a browser like google chrome for example. It works with Firefox as well.

Any modern browser has the option to enable debugging HTML web pages. So as with google chrome. So visit the netPI main page and choose from the chrome browser's three dots in the upper right corner the option "tools/development tools ... ". A new window will be opened next to the netPI web page.

In this window you have several tabs you can choose to look into, the most important one for you is the "network" tab. In this tab all the web browser's API calls to the netPI web pages are recorded message by message. So now login to netPI as usual ... you will see the requested login message being recorded under "headers" and you see also the response from netPI under "response" and the cookie. You should see basically the very same messages as those you call via the curl command. Then go on further to other netPI web sites you want to get recorded and analyse them ... by this method you will get out where your problem is with ease.

Thx
Armin
You never fail until you stop trying.“, Albert Einstein (1879 - 1955)

  Reply
#5
Hi all,

the approach to calculate the MAC address from the CPU serial number and the Raspberry OUI would be a possibilty. But since we want to communicate with the Hilscher API anyway, we decided to read the MAC address from the API as well.

Here is a short explanation of how we could use the API. Maybe it helps someone who is facing a similar problem.

Our problem with the network settings request was that we not expected that the last part of the path "LANSettings" is case sensitiv.
And also the category parameter (?category=LAN) is mandatory.
This request now works:
Code:
curl -k -X GET 'https://<HOST>:443/get/networksettings/LANSettings?category=LAN' -H 'Cookie: <AUTH-COOKIE>'

Another problem we faced while integrating the API in our application was the login.
From the following request you could extract the retrieved authentication cookie:
Code:
curl -v -k -X POST 'https://<HOST>:443/login' -H 'Content-Type: application/json' -d '{"username":<USER>,"password":<PASSWORD>}'
The response status code is "302 - Found". This is a redirection status code, so the many high level HTTP frameworks follow the redirects by default.
But if you follow the redirects the authentication cookie is no longer valid.
If we use the following request for logging in (with the -L option), the retrieved cookie is not valid:
Code:
curl -L -v -k -X POST 'https://<HOST>:443/login' -H 'Content-Type: application/json' -d '{"username":<USER>,"password":<PASSWORD>}'
So we have to make sure, that the automatic following of redirects is disabled for the login.

Best regards,
Benjamin
  Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  REST API server data communication MGharat 2 3,149 July-21st-2021, 07:01 AM
Last Post: MGharat
  TOSILOCK for CONTAINER COswald 3 3,096 July-13th-2021, 11:32 AM
Last Post: Armin@netPI
  Accessing netPI web UI with REST API Armin@netPI 14 10,606 June-30th-2021, 05:06 AM
Last Post: Armin@netPI
  Access to RTC from my own container application tad 1 4,197 March-19th-2021, 02:58 PM
Last Post: Armin@netPI
  [SOLVED] Starting services/commands/scripts at startup of a container Jonas.Sellmann@outlook.de 9 8,243 March-9th-2021, 08:47 AM
Last Post: WalterSchaefer
  OpenVPN container Armin@netPI 0 2,102 January-3rd-2021, 12:13 PM
Last Post: Armin@netPI
  operating Console of a container on netPI connected to Wi-Fi tethering tad 3 3,477 December-3rd-2020, 12:32 PM
Last Post: tad
  NIOT-E-NPIX-4DI4DO with netpi-netx container WalterSchaefer 3 9,452 November-25th-2020, 01:06 PM
Last Post: zen89
  NPIX-4DI4DO and NetPi-Nodered container issues alhammi 4 10,780 November-16th-2020, 01:35 PM
Last Post: alhammi
  Exporting and importing container images Armin@netPI 3 4,037 May-20th-2020, 11:24 AM
Last Post: COswald

Forum Jump:


Users browsing this thread: 1 Guest(s)