diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
index a02159c..adeda77 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostManager.java
@@ -193,7 +193,7 @@
         eventDispatcher.addSink(HostEvent.class, listenerRegistry);
         cfgService.registerProperties(getClass());
         networkConfigService.addListener(networkConfigListener);
-        monitor = new HostMonitor(packetService, this, interfaceService, edgePortService);
+        monitor = new HostMonitor(packetService, this, interfaceService, edgePortService, deviceService);
         monitor.setProbeRate(probeRate);
         monitor.start();
         cfgService.registerProperties(getClass());
diff --git a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
index ef1c796..8252213 100644
--- a/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
+++ b/core/net/src/main/java/org/onosproject/net/host/impl/HostMonitor.java
@@ -25,6 +25,8 @@
 import org.onlab.packet.VlanId;
 import org.onlab.packet.ndp.NeighborSolicitation;
 import org.onlab.util.SharedScheduledExecutors;
+import org.onosproject.net.Port;
+import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.intf.InterfaceService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Host;
@@ -63,6 +65,7 @@
     private HostManager hostManager;
     private InterfaceService interfaceService;
     private EdgePortService edgePortService;
+    private DeviceService deviceService;
 
     private final Set<IpAddress> monitoredAddresses;
 
@@ -78,19 +81,21 @@
      * Creates a new host monitor.
      *
      * @param packetService packet service used to send packets on the data plane
-     * @param hostManager host manager used to look up host information and
-     * probe existing hosts
+     * @param hostManager host manager used to look up host information and probe existing hosts
      * @param interfaceService interface service for interface information
      * @param edgePortService  edge port service
+     * @param deviceService device service
      */
     public HostMonitor(PacketService packetService, HostManager hostManager,
                        InterfaceService interfaceService,
-                       EdgePortService edgePortService) {
+                       EdgePortService edgePortService,
+                       DeviceService deviceService) {
 
         this.packetService = packetService;
         this.hostManager = hostManager;
         this.interfaceService = interfaceService;
         this.edgePortService = edgePortService;
+        this.deviceService = deviceService;
 
         monitoredAddresses = Collections.newSetFromMap(new ConcurrentHashMap<>());
         hostProviders = new ConcurrentHashMap<>();
@@ -188,8 +193,17 @@
      */
     private void sendRequest(IpAddress targetIp) {
         interfaceService.getMatchingInterfaces(targetIp).forEach(intf -> {
+            Port port = deviceService.getPort(intf.connectPoint());
+            if (port == null) {
+                log.debug("Aborting probing non-existent port: {}", intf);
+                return;
+            }
+            if (!port.isEnabled()) {
+                log.debug("Aborting probing disabled port: {}", intf);
+                return;
+            }
             if (!edgePortService.isEdgePoint(intf.connectPoint())) {
-                log.warn("Aborting attempt to send probe out non-edge port: {}", intf);
+                log.warn("Aborting probing non-edge port: {}", intf);
                 return;
             }
 
diff --git a/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java b/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java
index 37ae0d3..d492e39 100644
--- a/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java
+++ b/core/net/src/test/java/org/onosproject/net/host/impl/HostMonitorTest.java
@@ -126,7 +126,7 @@
         expectLastCall().times(2);
         replay(hostProvider);
 
-        hostMonitor = new HostMonitor(null, hostManager, null, edgePortService);
+        hostMonitor = new HostMonitor(null, hostManager, null, edgePortService, null);
 
         hostMonitor.registerHostProvider(hostProvider);
         hostMonitor.addMonitoringFor(hostIp);
@@ -151,6 +151,7 @@
 
         Port port = createMock(Port.class);
         expect(port.number()).andReturn(portNum).anyTimes();
+        expect(port.isEnabled()).andReturn(true).anyTimes();
         replay(port);
 
         TestDeviceService deviceService = new TestDeviceService();
@@ -173,7 +174,7 @@
 
 
         // Run the test
-        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService);
+        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService);
 
         hostMonitor.addMonitoringFor(TARGET_IPV4_ADDR);
         hostMonitor.run();
@@ -220,6 +221,7 @@
 
         Port port = createMock(Port.class);
         expect(port.number()).andReturn(portNum).anyTimes();
+        expect(port.isEnabled()).andReturn(true).anyTimes();
         replay(port);
 
         TestDeviceService deviceService = new TestDeviceService();
@@ -242,7 +244,7 @@
 
 
         // Run the test
-        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService);
+        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService);
 
         hostMonitor.addMonitoringFor(TARGET_IPV6_ADDR);
         hostMonitor.run();
@@ -291,6 +293,7 @@
 
         Port port = createMock(Port.class);
         expect(port.number()).andReturn(portNum).anyTimes();
+        expect(port.isEnabled()).andReturn(true).anyTimes();
         replay(port);
 
         TestDeviceService deviceService = new TestDeviceService();
@@ -313,7 +316,7 @@
 
 
         // Run the test
-        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService);
+        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService);
 
         hostMonitor.addMonitoringFor(TARGET_IPV4_ADDR);
         hostMonitor.run();
@@ -361,6 +364,7 @@
 
         Port port = createMock(Port.class);
         expect(port.number()).andReturn(portNum).anyTimes();
+        expect(port.isEnabled()).andReturn(true).anyTimes();
         replay(port);
 
         TestDeviceService deviceService = new TestDeviceService();
@@ -383,7 +387,7 @@
 
 
         // Run the test
-        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService);
+        hostMonitor = new HostMonitor(packetService, hostManager, interfaceService, edgePortService, deviceService);
 
         hostMonitor.addMonitoringFor(TARGET_IPV6_ADDR);
         hostMonitor.run();
@@ -451,5 +455,12 @@
             }
             return ports;
         }
+
+        @Override
+        public Port getPort(ConnectPoint cp) {
+            return devicePorts.get(cp.deviceId()).stream()
+                    .filter(p -> p.number().equals(cp.port()))
+                    .findAny().orElse(null);
+        }
     }
 }
