MAC vendor lookup: Difference between revisions
m (→{{header|Java}}: added zkl header) |
(→{{header|zkl}}: added code) |
||
Line 80: | Line 80: | ||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
{{trans|Lua}} |
|||
Uses libcurl (the multiprotocol file transfer library) to do the web query |
|||
<lang zkl>var [const] CURL=Import("zklCurl"); // libcurl |
|||
const MAC_VENDORS="http://api.macvendors.com/"; |
|||
fcn lookUp(macAddress){ |
|||
httpAddr:=MAC_VENDORS + macAddress; |
|||
vender:=CURL().get(httpAddr); //-->(Data,bytes of header,bytes of trailer) |
|||
vender=vender[0].del(0,vender[1]); // remove HTTP header |
|||
vender.text; // Data --> String (Data is a byte bucket) |
|||
}</lang> |
|||
<lang zkl>lookUp("FC-A1-3E-2A-1C-33").println(); |
|||
lookUp("4c:72:b9:56:fe:bc").println();</lang> |
|||
{{out}} |
|||
<pre> |
|||
Samsung Electronics Co.,Ltd |
|||
PEGATRON CORPORATION |
|||
</pre> |
Revision as of 00:14, 15 January 2017
You are encouraged to solve this task according to the task description, using any language you may know.
Every connected device around the world comes with a unique Media Access Control address, or a MAC address. A common task a network administrator may come across is being able to identify a network device's manufacturer when given only a MAC address.
- Basic Task
The task is to interface with one (or numerous) APIs that exist on the internet and retrieve the device manufacturer based on a supplied MAC address.
A MAC address that does not return a valid result should return the String "N/A". A error related to the network connectivity or the API should return a null result.
Lua
<lang lua> -- Requires LuaSocket extension by Lua -- Created by James A. Donnell Jr. -- www.JamesDonnell.com
local baseURL = "http://api.macvendors.com/"
local function lookup(macAddress) http = require "socket.http" result, statuscode, content = http.request(baseURL .. macAddress) return result end
local macAddress = "FC-A1-3E-2A-1C-33" print(lookup(macAddress)) </lang>
Java
<lang java> package com.jamesdonnell.MACVendor;
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL;
/** MAC Vendor Lookup class.
* www.JamesDonnell.com * @author James A. Donnell Jr. */
public class Lookup { /** Base URL for API. The API from www.macvendors.com was chosen. */ private static final String baseURL = "http://api.macvendors.com/";
/** Performs lookup on MAC address(es) supplied in arguments. * @param args MAC address(es) to lookup. */ public static void main(String[] args) { for (String arguments : args) System.out.println(arguments + ": " + get(arguments)); }
/** Performs lookup on supplied MAC address. * @param macAddress MAC address to lookup. * @return Manufacturer of MAC address. */ private static String get(String macAddress) { try { StringBuilder result = new StringBuilder(); URL url = new URL(baseURL + macAddress); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { result.append(line); } rd.close(); return result.toString(); } catch (FileNotFoundException e) { // MAC not found return "N/A"; } catch (IOException e) { // Error during lookup, either network or API. return null; } } } </lang>
zkl
Uses libcurl (the multiprotocol file transfer library) to do the web query <lang zkl>var [const] CURL=Import("zklCurl"); // libcurl const MAC_VENDORS="http://api.macvendors.com/";
fcn lookUp(macAddress){
httpAddr:=MAC_VENDORS + macAddress; vender:=CURL().get(httpAddr); //-->(Data,bytes of header,bytes of trailer) vender=vender[0].del(0,vender[1]); // remove HTTP header vender.text; // Data --> String (Data is a byte bucket)
}</lang> <lang zkl>lookUp("FC-A1-3E-2A-1C-33").println(); lookUp("4c:72:b9:56:fe:bc").println();</lang>
- Output:
Samsung Electronics Co.,Ltd PEGATRON CORPORATION