dependencies
| (this space intentionally left almost blank) | ||||||
(ns inet.address (:require [inet.address.core :as address-core] [inet.address.six :as address-six] [potemkin :refer [import-vars]])) | |||||||
(import-vars [address-core ;; static all-by-name by-address by-name localhost loopback ;; behaviour address canonical-hostname host-address hostname any-local-address? link-local-address? loopback-address? mc-global? mc-link-local? mc-node-local? mc-org-local? mc-site-local? multicast-address? reachable? site-local-address? ;; constructor create]) | |||||||
(import-vars [address-six ;; behaviour scoped-interface scope-id ipv4-compatible-address?]) | |||||||
(ns inet.address.four (:require [inet.address.core :as ipnet-core] [potemkin :refer [import-vars]]) (:import (java.net Inet4Address))) | |||||||
Static Methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
Given the name of a host, returns an Clojure vector of its IP address objects, based on the configured name service on the system. | (defn all-by-name [host] (->> host (Inet4Address/getAllByName) (into []))) | ||||||
Returns an In the arity-1 case, an object is given a vector of octets representing a 'raw' IP address. In the arity-2 case, an object is given based on the provided host name and a 'raw' IP address. Note: expected type of | (defn by-address ([addr] (Inet4Address/getByAddress (byte-array addr))) ([host addr] (Inet4Address/getByAddress host (byte-array addr)))) | ||||||
Determines the IP address of a host, given the host's name. | (defn by-name [host] (Inet4Address/getByName host)) | ||||||
Returns the address of the local host. | (defn localhost [] (Inet4Address/getLocalHost)) | ||||||
Returns the loopback address. | (defn loopback [] (Inet4Address/getLoopbackAddress)) | ||||||
Implementation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(extend Inet4Address ipnet-core/Address ipnet-core/behaviour) | |||||||
Aliases ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(import-vars [ipnet-core ;; behaviour address canonical-hostname host-address hostname any-local-address? link-local-address? loopback-address? mc-global? mc-link-local? mc-node-local? mc-org-local? mc-site-local? multicast-address? reachable? site-local-address?]) | |||||||
(ns inet.address.core (:import (java.net InetAddress))) | |||||||
Static Methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
Given the name of a host, returns an Clojure vector of its IP address objects, based on the configured name service on the system. | (defn all-by-name [host] (->> host (InetAddress/getAllByName) (into []))) | ||||||
Returns an In the arity-1 case, an object is given a vector of octets representing a 'raw' IP address. In the arity-2 case, an object is given based on the provided host name and a 'raw' IP address. Note: expected type of | (defn by-address ([addr] (InetAddress/getByAddress (byte-array addr))) ([host addr] (InetAddress/getByAddress host (byte-array addr)))) | ||||||
Determines the IP address of a host, given the host's name. | (defn by-name [host] (InetAddress/getByName host)) | ||||||
Returns the address of the local host. | (defn localhost [] (InetAddress/getLocalHost)) | ||||||
Returns the loopback address. | (defn loopback [] (InetAddress/getLoopbackAddress)) | ||||||
Protocol ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(defprotocol Address (address [this] "Returns the raw IP address of this InetAddress object as a Clojure vector.") (canonical-hostname [this] "Gets the fully qualified domain name for this IP address.") (host-address [this] "Returns the IP address string in textual presentation.") (hostname [this] "Gets the host name for this IP address.") (any-local-address? [this] "Utility routine to check if the InetAddress in a wildcard address.") (link-local-address? [this] "Utility routine to check if the InetAddress is an link local address.") (loopback-address? [this] "Utility routine to check if the InetAddress is a loopback address.") (mc-global? [this] "Utility routine to check if the multicast address has global scope.") (mc-link-local? [this] "Utility routine to check if the multicast address has link scope.") (mc-node-local? [this] "Utility routine to check if the multicast address has node scope.") (mc-org-local? [this] "Utility routine to check if the multicast address has organization scope.") (mc-site-local? [this] "Utility routine to check if the multicast address has site scope.") (multicast-address? [this] "Utility routine to check if the InetAddress is an IP multicast address.") (reachable? [this timeout] [this net-iface ttl timeout] "Test whether that address is reachable. The units of `timeout` is milliseconds.") (site-local-address? [this] "Utility routine to check if the InetAddress is a site local address.")) | |||||||
Implementation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(def behaviour {:address (fn [this] (into [] (.getAddress this))) :canonical-hostname (fn [this] (.getCanonicalHostName this)) :host-address (fn [this] (.getHostAddress this)) :hostname (fn [this] (.getHostName this)) :any-local-address? (fn [this] (.isAnyLocalAddress this)) :link-local-address? (fn [this] (.isLinkLocalAddress this)) :loopback-address? (fn [this] (.isLoopbackAddress this)) :mc-global? (fn [this] (.isMCGlobal this)) :mc-link-local? (fn [this] (.isMCLinkLocal this)) :mc-node-local? (fn [this] (.isMCNodeLocal this)) :mc-org-local? (fn [this] (.isMCOrgLocal this)) :mc-site-local? (fn [this] (.isMCSiteLocal this)) :multicast-address? (fn [this] (.isMulticastAddress this)) :reachable? (fn ([this timeout] (.isReachable this timeout)) ([this net-iface ttl timeout] (.isReachable this net-iface ttl timeout))) :site-local-address? (fn [this] (.isSiteLocalAddress this))}) | |||||||
(extend InetAddress Address behaviour) | |||||||
Constructors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(def create #'by-address) | |||||||
(ns inet.address.six (:require [inet.address.core :as ipnet-core] [potemkin :refer [import-vars]]) (:import (java.net Inet6Address))) | |||||||
Static Methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
Given the name of a host, returns an Clojure vector of its IP address objects, based on the configured name service on the system. | (defn all-by-name [host] (->> host (Inet6Address/getAllByName) (into []))) | ||||||
Returns an This creates an
| (defn by-address [host addr scope-or-nif] (Inet6Address/getByAddress host (byte-array addr) scope-or-nif)) | ||||||
Determines the IP address of a host, given the host's name. | (defn by-name [host] (Inet6Address/getByName host)) | ||||||
Returns the address of the local host. | (defn localhost [] (Inet6Address/getLocalHost)) | ||||||
Returns the loopback address. | (defn loopback [] (Inet6Address/getLoopbackAddress)) | ||||||
Protocol ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(defprotocol IPV6Address (scoped-interface [this] "Returns the scoped interface, if this instance was created with with a scoped interface.") (scope-id [this] "Returns the numeric scopeId, if this instance is associated with an interface.") (ipv4-compatible-address? [this] "Utility routine to check if the InetAddress is an IPv4 compatible IPv6 address.")) | |||||||
Implementation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(def behaviour (merge ipnet-core/behaviour {:scoped-interface (fn [this] (.getScopedInterface this)) :scope-id (fn [this] (.getScopeId this)) :ipv4-compatible-address? (fn [this] (.isIPv4CompatibleAddress this))})) | |||||||
(extend Inet6Address IPV6Address behaviour) (extend Inet6Address ipnet-core/Address behaviour) | |||||||
Constructors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(def create #'by-address) | |||||||
Aliases ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(import-vars [ipnet-core ;; behaviour address canonical-hostname host-address hostname any-local-address? link-local-address? loopback-address? mc-global? mc-link-local? mc-node-local? mc-org-local? mc-site-local? multicast-address? reachable? site-local-address?]) | |||||||
(ns inet.interface (:refer-clojure :exclude [index name]) (:import (java.net NetworkInterface))) | |||||||
Static Methods ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
Get a network interface given its index. | (defn by-index [idx] (NetworkInterface/getByIndex idx)) | ||||||
Convenience method to search for a network interface that has the specified Internet Protocol (IP) address bound to it. | (defn by-inet-address [addr] (NetworkInterface/getByInetAddress addr)) | ||||||
Searches for the network interface with the specified name. | (defn by-name [iface-name] (NetworkInterface/getByName iface-name)) | ||||||
Returns all the interfaces on this machine. | (defn network-interfaces [] (-> (NetworkInterface/getNetworkInterfaces) (enumeration-seq) (vec))) | ||||||
Protocol ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(defprotocol NetInterface (display-name [this] "Get the display name of this network interface.") (hardware-address [this] "Returns the hardware address (usually MAC) of the interface if it has one and if it can be accessed given the current privileges.") (index [this] "Returns the index of this network interface.") (inet-addresses [this] "Convenience method to return an Enumeration with all or a subset of the InetAddresses bound to this network interface.") (interface-addresses [this] "Get a List of all or a subset of the InterfaceAddresses of this network interface.") (mtu [this] "Returns the Maximum Transmission Unit (MTU) of this interface.") (name [this] "Get the name of this network interface.") (parent [this] "Returns the parent NetworkInterface of this interface if this is a subinterface, or null if it is a physical (non virtual) interface or has no parent.") (sub-interfaces [this] "Get an Enumeration with all the subinterfaces (also known as virtual interfaces) attached to this network interface.") (loopback? [this] "Returns whether a network interface is a loopback interface.") (point-to-point? [this] "Returns whether a network interface is a point to point interface.") (up? [this] "Returns whether a network interface is up and running.") (virtual? [this] "Returns whether this interface is a virtual interface (also called subinterface).") (supports-multicast? [this] "Returns whether a network interface supports multicasting or not.")) | |||||||
Implementation ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||
(def behaviour {:display-name (fn [this] (.getDisplayName this)) :hardware-address (fn [this] (->> (.getHardwareAddress this) (map #(format "%02x" %)) (vec))) :index (fn [this] (.getIndex this)) :inet-addresses (fn [this] (-> (.getInetAddresses this) (enumeration-seq) (vec))) :interface-addresses (fn [this] (.getInterfaceAddresses this)) :mtu (fn [this] (.getMTU this)) :name (fn [this] (.getName this)) :parent (fn [this] (.getParent this)) :sub-interfaces (fn [this] (-> (.getSubInterfaces this) (enumeration-seq) (vec))) :loopback? (fn [this] (.isLoopback this)) :point-to-point? (fn [this] (.isPointToPoint this)) :up? (fn [this] (.isUp this)) :virtual? (fn [this] (.isVirtual this)) :supports-multicast? (fn [this] (.supportsMulticast this))}) | |||||||
(extend NetworkInterface NetInterface behaviour) | |||||||
Constructors ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |||||||