ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - ephe-meral/mac: MAC-to-vendor search for Elixir
MAC-to-vendor search for Elixir. Contribute to ephe-meral/mac development by creating an account on GitHub.
Visit Site

GitHub - ephe-meral/mac: MAC-to-vendor search for Elixir

GitHub - ephe-meral/mac: MAC-to-vendor search for Elixir

Build Status Hex.pm Hex version Documentation

MAC

Parses a MAC-to-vendor database file and builds a search tree from that. This search tree is loaded into memory and can be used via the standard API.

MAC database

Uses the compiled version from the wireshark project:

https://code.wireshark.org/review/gitweb?p=wireshark.git;a=blob_plain;f=manuf;hb=HEAD

setup

In your mix.exs file:

def deps do
  [{:mac, ">= 0.1.0"}]
end

Note that the initial compilation might take a few more seconds since it compiles the lookup table.

usage

# standard usage:
MAC.fetch_vendor("00:00:0F:00:00:00")
# => {:ok, "NEXT, INC."}

MAC.fetch_vendor("other stuff or non-existing")
# => :error

# works with different formats by stripping away unexpected chars:
MAC.fetch_vendor(" 00+++00\\\\0F00----00   00  ")
# => {:ok, "NEXT, INC."}

# the parser does also accept bit-masks, so you can also use
MAC.Parser.to_bitstring("00:00:F0/20")
# => <<0, 0, 15::size(4)>>

speed

For a very simple profiling experiment, I used fprof and 10000 lookups of the same MAC with sub-space matching, which took approx. 7600 milliseconds.

If you seem to have problems with the lookup speed, please let me know (create an issue here). I assume that this approach is still faster than calling an external API etc. for this purpose.

lookup-table structure and assumptions

The table is a max 2 level map with the following assumptions:

  • the outer map's keys are the first 3 byte of the MAC address
  • the outer map's values are either:
    • a binary with the company name, or
    • a tuple with {key_bitsize, sub_match_map}
  • a sub-match map key is the entire prefix of any MAC address space with a bitmask biggen than /24 - they are required to be all of the same length per sub-match map (the compiler will notify you if it drops keys b/c of a mismatch)
  • the sub-match map's values are the binary vendor names
%{<<1, 2, 3>> => "Some Company Inc.",
  <<4, 5, 6>> => {32, %{
    <<4, 5, 6, 7>> => "Another Comp LLC",
    <<4, 5, 6, 8>> => "A 3rd Organisation"}}}

is it any good?

bien sûr.

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory