diff --git a/include/meson.build b/include/meson.build
index 8b8b1dd..6d02351 100644
--- a/include/meson.build
+++ b/include/meson.build
@@ -9,6 +9,7 @@
   'stdplus/hash.hpp',
   'stdplus/hash/array.hpp',
   'stdplus/hash/tuple.hpp',
+  'stdplus/net/addr/ip.hpp',
   'stdplus/numeric/endian.hpp',
   'stdplus/pinned.hpp',
   'stdplus/raw.hpp',
diff --git a/include/stdplus/net/addr/ip.hpp b/include/stdplus/net/addr/ip.hpp
new file mode 100644
index 0000000..71bb7f6
--- /dev/null
+++ b/include/stdplus/net/addr/ip.hpp
@@ -0,0 +1,90 @@
+#pragma once
+#include <netinet/in.h>
+
+#include <stdplus/hash.hpp>
+
+#include <algorithm>
+#include <variant>
+
+namespace stdplus
+{
+namespace detail
+{
+struct In4AddrInner
+{
+    union
+    {
+        in_addr a;
+        uint32_t s4_addr32;
+        uint8_t s4_addr[4];
+    };
+};
+static_assert(sizeof(In4AddrInner) == sizeof(in_addr));
+} // namespace detail
+
+struct In4Addr : detail::In4AddrInner
+{
+    constexpr In4Addr() noexcept : detail::In4AddrInner() {}
+    constexpr In4Addr(in_addr a) noexcept : detail::In4AddrInner({a}) {}
+    explicit constexpr In4Addr(std::initializer_list<uint8_t> a) noexcept :
+        detail::In4AddrInner()
+    {
+        std::copy(a.begin(), a.end(), s4_addr);
+    }
+
+    constexpr operator in_addr() const noexcept
+    {
+        return a;
+    }
+
+    constexpr bool operator==(in_addr rhs) const noexcept
+    {
+        return a.s_addr == rhs.s_addr;
+    }
+
+    constexpr bool operator==(In4Addr rhs) const noexcept
+    {
+        return a.s_addr == rhs.a.s_addr;
+    }
+};
+
+struct In6Addr : in6_addr
+{
+    constexpr In6Addr() noexcept : in6_addr() {}
+    constexpr In6Addr(in6_addr a) noexcept : in6_addr(a) {}
+    explicit constexpr In6Addr(std::initializer_list<uint8_t> a) noexcept :
+        in6_addr()
+    {
+        std::copy(a.begin(), a.end(), s6_addr);
+    }
+
+    constexpr bool operator==(in6_addr rhs) const noexcept
+    {
+        return std::equal(s6_addr32, s6_addr32 + 4, rhs.s6_addr32);
+    }
+
+    constexpr bool operator==(In6Addr rhs) const noexcept
+    {
+        return *this == static_cast<in6_addr&>(rhs);
+    }
+};
+
+} // namespace stdplus
+
+template <>
+struct std::hash<stdplus::In4Addr>
+{
+    constexpr std::size_t operator()(in_addr addr) const noexcept
+    {
+        return stdplus::hashMulti(addr.s_addr);
+    }
+};
+
+template <>
+struct std::hash<stdplus::In6Addr>
+{
+    constexpr std::size_t operator()(in6_addr addr) const noexcept
+    {
+        return stdplus::hashMulti(addr.s6_addr32);
+    }
+};
diff --git a/src/meson.build b/src/meson.build
index 5f5c78b..e62ecbd 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -50,6 +50,7 @@
   'hash.cpp',
   'hash/array.cpp',
   'hash/tuple.cpp',
+  'net/addr/ip.cpp',
   'numeric/endian.cpp',
   'pinned.cpp',
   'raw.cpp',
diff --git a/src/net/addr/ip.cpp b/src/net/addr/ip.cpp
new file mode 100644
index 0000000..466c509
--- /dev/null
+++ b/src/net/addr/ip.cpp
@@ -0,0 +1 @@
+#include <stdplus/net/addr/ip.hpp>
diff --git a/test/meson.build b/test/meson.build
index c4e8a4d..e55b18c 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -6,6 +6,7 @@
   'hash': [stdplus_dep, gtest_main_dep],
   'hash/array': [stdplus_dep, gtest_main_dep],
   'hash/tuple': [stdplus_dep, gtest_main_dep],
+  'net/addr/ip': [stdplus_dep, gtest_main_dep],
   'numeric/endian': [stdplus_dep, gtest_main_dep],
   'pinned': [stdplus_dep, gtest_main_dep],
   'raw': [stdplus_dep, gmock_dep, gtest_main_dep],
diff --git a/test/net/addr/ip.cpp b/test/net/addr/ip.cpp
new file mode 100644
index 0000000..2745626
--- /dev/null
+++ b/test/net/addr/ip.cpp
@@ -0,0 +1,26 @@
+#include <stdplus/net/addr/ip.hpp>
+#include <stdplus/numeric/endian.hpp>
+
+#include <gtest/gtest.h>
+
+namespace stdplus
+{
+
+TEST(EqualOperator, In4Addr)
+{
+    EXPECT_EQ((In4Addr{255, 0, 255, 0}), (in_addr{hton(0xff00ff00)}));
+    EXPECT_EQ((in_addr{}), (In4Addr{}));
+    EXPECT_NE((In4Addr{1}), (In4Addr{in_addr{}}));
+    std::hash<In4Addr>{}(In4Addr{});
+}
+
+TEST(EqualOperator, In6Addr)
+{
+    EXPECT_EQ((In6Addr{0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff}),
+              (in6_addr{0xff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff}));
+    EXPECT_EQ((in6_addr{}), (In6Addr{}));
+    EXPECT_NE((In6Addr{1}), (In6Addr{in6_addr{}}));
+    std::hash<In6Addr>{}(In6Addr{});
+}
+
+} // namespace stdplus
