diff --git a/src/net/address-converter.cpp b/src/net/address-converter.cpp
index e29c0c0..05936b0 100644
--- a/src/net/address-converter.cpp
+++ b/src/net/address-converter.cpp
@@ -27,22 +27,9 @@
 
 #include "address-converter.hpp"
 
-#include <net/if.h> // for if_indextoname()
-
 namespace ndn {
 namespace ip {
 
-optional<std::string>
-scopeNameFromId(unsigned int scopeId)
-{
-  char buffer[IFNAMSIZ];
-  auto scopeName = if_indextoname(scopeId, buffer);
-  if (scopeName != nullptr) {
-    return std::string(scopeName);
-  }
-  return nullopt;
-}
-
 boost::asio::ip::address
 addressFromString(const std::string& address, boost::system::error_code& ec)
 {
@@ -52,34 +39,19 @@
 boost::asio::ip::address
 addressFromString(const std::string& address)
 {
-  boost::system::error_code ec;
-  auto addr = addressFromString(address, ec);
-  if (ec) {
-    BOOST_THROW_EXCEPTION(boost::system::system_error(ec));
-  }
-  return addr;
+  return boost::asio::ip::address::from_string(address);
 }
 
 boost::asio::ip::address_v6
 addressV6FromString(const std::string& address, boost::system::error_code& ec)
 {
-  auto addr = addressFromString(address, ec);
-  if (ec || addr.is_v4()) {
-    ec = boost::asio::error::invalid_argument;
-    return {};
-  }
-  return addr.to_v6();
+  return boost::asio::ip::address_v6::from_string(address, ec);
 }
 
 boost::asio::ip::address_v6
 addressV6FromString(const std::string& address)
 {
-  boost::system::error_code ec;
-  auto addr = addressV6FromString(address, ec);
-  if (ec) {
-    BOOST_THROW_EXCEPTION(boost::system::system_error(ec));
-  }
-  return addr;
+  return boost::asio::ip::address_v6::from_string(address);
 }
 
 } // namespace ip
diff --git a/src/net/address-converter.hpp b/src/net/address-converter.hpp
index b58cfff..0ea945e 100644
--- a/src/net/address-converter.hpp
+++ b/src/net/address-converter.hpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2017 Regents of the University of California,
+ * Copyright (c) 2013-2018 Regents of the University of California,
  *                         Arizona Board of Regents,
  *                         Colorado State University,
  *                         University Pierre & Marie Curie, Sorbonne University,
@@ -37,14 +37,6 @@
 namespace ip {
 
 /**
- * \brief Convert scope ID of IPv6 address into interface name
- *
- * \return interface name, or ndn::nullopt if \p scopeId cannot be converted
- */
-optional<std::string>
-scopeNameFromId(unsigned int scopeId);
-
-/**
  * \brief parse and convert the input string into an IP address
  *
  * \param str the string to parse
@@ -52,6 +44,7 @@
  * \return the converted IP address
  * \throw boost::system::system_error in case of failure
  */
+[[deprecated("use boost::asio::ip::address::from_string")]]
 boost::asio::ip::address
 addressFromString(const std::string& str);
 
@@ -64,6 +57,7 @@
  * \return the converted IP address, or a default-constructed
  *         `boost::asio::ip::address` in case of failure
  */
+[[deprecated("use boost::asio::ip::address::from_string")]]
 boost::asio::ip::address
 addressFromString(const std::string& str, boost::system::error_code& ec);
 
@@ -75,6 +69,7 @@
  * \return the converted IPv6 address
  * \throw boost::system::system_error in case of failure
  */
+[[deprecated("use boost::asio::ip::address_v6::from_string")]]
 boost::asio::ip::address_v6
 addressV6FromString(const std::string& str);
 
@@ -87,6 +82,7 @@
  * \return the converted IPv6 address, or a default-constructed
  *         `boost::asio::ip::address_v6` in case of failure
  */
+[[deprecated("use boost::asio::ip::address_v6::from_string")]]
 boost::asio::ip::address_v6
 addressV6FromString(const std::string& str, boost::system::error_code& ec);
 
diff --git a/tests/unit-tests/net/address-converter.t.cpp b/tests/unit-tests/net/address-converter.t.cpp
index 712bf6d..f77c541 100644
--- a/tests/unit-tests/net/address-converter.t.cpp
+++ b/tests/unit-tests/net/address-converter.t.cpp
@@ -1,6 +1,6 @@
 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
- * Copyright (c) 2013-2017 Regents of the University of California,
+ * Copyright (c) 2013-2018 Regents of the University of California,
  *                         Arizona Board of Regents,
  *                         Colorado State University,
  *                         University Pierre & Marie Curie, Sorbonne University,
@@ -43,20 +43,6 @@
     BOOST_CHECK_EQUAL(address, addrV6);                                 \
 } while (false)
 
-BOOST_AUTO_TEST_CASE(ScopeNameFromId)
-{
-  const auto& networkInterfaces = net::tests::collectNetworkInterfaces();
-  if (!networkInterfaces.empty()) {
-    const auto& netif = networkInterfaces.front();
-    auto index = netif->getIndex();
-    auto name = netif->getName();
-
-    BOOST_CHECK_EQUAL(scopeNameFromId(index).value(), name);
-  }
-
-  BOOST_CHECK(!scopeNameFromId(std::numeric_limits<unsigned int>::max()));
-}
-
 BOOST_AUTO_TEST_CASE(AddressFromString)
 {
   boost::asio::ip::address addr;
