From 313d0bab4e688990f41f5cd4ef5d74da19f9b340 Mon Sep 17 00:00:00 2001 From: Kaushik Date: Fri, 31 Dec 2021 17:59:07 +0530 Subject: [PATCH] Added device status check --- network_devices.py | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/network_devices.py b/network_devices.py index 9ce4a03..d164f06 100644 --- a/network_devices.py +++ b/network_devices.py @@ -2,6 +2,7 @@ from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * from scapy.all import * +from scapy.layers.inet import IP, ICMP from network_monitor import InterfacePick @@ -43,8 +44,8 @@ class NetworkDevices(QWidget): self.tableWidget.setShowGrid(True) self.tableWidget.setGridStyle(Qt.NoPen) self.tableWidget.setRowCount(0) - self.tableWidget.setColumnCount(2) - self.tableWidget.setHorizontalHeaderLabels(["IP", "MAC"]) + self.tableWidget.setColumnCount(3) + self.tableWidget.setHorizontalHeaderLabels(["IP", "MAC", "Status"]) self.tableWidget.horizontalHeader().setVisible(True) self.tableWidget.horizontalHeader().setCascadingSectionResizes(True) self.tableWidget.horizontalHeader().setHighlightSections(False) @@ -80,6 +81,8 @@ class NetworkDevices(QWidget): entry_ip = str(output[i], encoding='utf-8') entry_mac = str(output[i+1], encoding='utf-8').replace("-",":") + if entry_mac == "ff:ff:ff:ff:ff:ff": + continue mul_addr = int(entry_ip.split('.')[0]) if mul_addr >= 224 and mul_addr < 240: continue @@ -87,14 +90,24 @@ class NetworkDevices(QWidget): arpData = dict() arpData['IP'] = entry_ip arpData['MAC'] = entry_mac + arpData['Status'] = self.refreshStatus(entry_ip) self.addArpToTableWidget(arpData) def addArpToTableWidget(self, arpData): rowpos = self.tableWidget.rowCount() self.tableWidget.insertRow(rowpos) - self.tableWidget.setItem(rowpos, 0, QTableWidgetItem(arpData['IP'])) - self.tableWidget.setItem(rowpos, 1, QTableWidgetItem(arpData['MAC'])) + + ip_item = QTableWidgetItem(arpData['IP']) + ip_item.setTextAlignment(Qt.AlignCenter) + mac_item = QTableWidgetItem(arpData['MAC']) + mac_item.setTextAlignment(Qt.AlignCenter) + status_item = QTableWidgetItem(arpData['Status']) + status_item.setTextAlignment(Qt.AlignCenter) + + self.tableWidget.setItem(rowpos, 0, ip_item) + self.tableWidget.setItem(rowpos, 1, mac_item) + self.tableWidget.setItem(rowpos, 2, status_item) self.vbar = self.tableWidget.verticalScrollBar() self._scroll = self.vbar.value() == self.vbar.maximum() @@ -104,4 +117,21 @@ class NetworkDevices(QWidget): self.interfaceDiag.exec_() if hasattr(self.interfaceDiag, 'interfaceIP') and hasattr(self.interfaceDiag, 'interfaceName'): self.networkIP = self.interfaceDiag.interfaceIP - self.interfbtn.setText(self.interfaceDiag.interfaceName) \ No newline at end of file + self.interfbtn.setText(self.interfaceDiag.interfaceName) + + def refreshStatus(self, deviceIP): + try: + packet = IP(dst=deviceIP)/ICMP() + + status = 'Unresponsive' + for _ in range(3): + output = sr1(packet, timeout=2, verbose=0) + if output is not None: + if output.type is 0: + status = 'Reachable - {}ms'.format( + int((output.time - packet.sent_time)*1000) + ) + break + return status + except socket.gaierror: + return 'Invalid address' \ No newline at end of file