/ip-interfaces

Common Lisp library to query network interfaces on the local machine

Primary LanguageCommon LispOtherNOASSERTION

ip-interfaces Build Status Build status

Introduction

The ip-interfaces library provides a convenient way to obtain a list of available interfaces on a machine.

IP-Interfaces is a port of Clozure CL's %get-ip-interfaces function to CFFI so that it can run on other lisp implementations. So far ip-interfaces has been tested successfully on the following platforms:

Implementation Windows Mac OS X Linux OpenBSD
SBCL Yes Yes Yes Yes
CMUCL Yes Yes
CLISP Yes Yes Yes Yes
Clozure Yes Yes Yes
Allegro Yes Yes Yes
ECL Yes Yes Yes
LispWorks Yes

IP-Interfaces is released under the LLGPL to maintain license compatibility with Clozure CL.

Note: ip-interfaces is not a socket library. If you are looking for a portable socket library, check out usocket.

Usage

The API for ip-interfaces consists of a single function, get-ip-interfaces, which returns a list of ip-interface structs containing information about the interfaces on the machine:

* (ql:quickload :ip-interfaces)

NIL
* (use-package :ip-interfaces)

T
* (get-ip-interfaces)

(#S(IP-INTERFACES::IP-INTERFACE
    :NAME "lo0"
    :ADDRESS #(127 0 0 1)
    :NETMASK #(255 0 0 0)
    :BROADCAST-ADDRESS #(127 0 0 1)
    :FLAGS 32841
    :ADDRESS-FAMILY :AF-INET)
 ...)
* (ip-interface-address (first *))

#(127 0 0 1)