AUNMS---Network-Monitoring-.../network_devices.py
2021-12-31 01:18:20 +05:30

107 lines
3.8 KiB
Python

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from scapy.all import *
from network_monitor import InterfacePick
class NetworkDevices(QWidget):
def __init__(self):
super().__init__()
self.networkIP = ''
self.layout = QGridLayout()
self.header = QLabel("Connected hosts on the network:")
self.interfbtn = QPushButton()
self.interfbtn.setFixedSize(300, 40)
self.interfbtn.setText('[Select Network]')
self.interfbtn.clicked.connect(self.networkInterface)
self.refreshbtn = QPushButton()
self.refreshbtn.setFixedSize(350, 40)
self.refreshbtn.setText('Refresh Status')
self.refreshbtn.clicked.connect(self.getConnectedDevices)
self._createTable()
self.layout.addWidget(self.header, 0, 0)
self.layout.addWidget(self.interfbtn, 0, 1)
self.layout.addWidget(self.refreshbtn, 0, 2)
self.layout.addWidget(self.tableWidget, 1, 0, 1, 3)
self.setLayout(self.layout)
def _createTable(self):
self.tableWidget = QTableWidget()
self.tableWidget.setStyleSheet('border-bottom: 1px solid #d6d9dc')
self.tableWidget.setTabKeyNavigation(False)
self.tableWidget.setProperty("showDropIndicator", False)
self.tableWidget.setDragDropOverwriteMode(False)
self.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)
self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
self.tableWidget.setShowGrid(True)
self.tableWidget.setGridStyle(Qt.NoPen)
self.tableWidget.setRowCount(0)
self.tableWidget.setColumnCount(2)
self.tableWidget.setHorizontalHeaderLabels(["IP", "MAC"])
self.tableWidget.horizontalHeader().setVisible(True)
self.tableWidget.horizontalHeader().setCascadingSectionResizes(True)
self.tableWidget.horizontalHeader().setHighlightSections(False)
self.tableWidget.horizontalHeader().setSortIndicatorShown(True)
self.tableWidget.verticalHeader().setVisible(False)
self.tableWidget.setSortingEnabled(False)
self.tableWidget.setEditTriggers(QTableWidget.NoEditTriggers)
self.tableWidget.setAutoScroll(True)
self.tableWidget.horizontalHeader(). setSectionResizeMode(QHeaderView.Stretch)
sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(
self.tableWidget.sizePolicy().hasHeightForWidth())
self.tableWidget.setSizePolicy(sizePolicy)
def getConnectedDevices(self):
while self.networkIP is '':
sys.stdout.write('\a')
sys.stdout.flush()
self.networkInterface()
output = subprocess.check_output(["arp", "-a"]) #get ARP table
output = output.partition(bytes(f"Interface: {self.networkIP}", 'utf-8'))[2]
output = output.split(b'Interface')[0]
output = output.split()[7:]
self.tableWidget.clearContents()
self.tableWidget.setRowCount(0)
for i in range(0, len(output), 3):
entry_ip = str(output[i], encoding='utf-8')
entry_mac = str(output[i+1], encoding='utf-8').replace("-",":")
mul_addr = int(entry_ip.split('.')[0])
if mul_addr >= 224 and mul_addr < 240:
continue
arpData = dict()
arpData['IP'] = entry_ip
arpData['MAC'] = entry_mac
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']))
self.vbar = self.tableWidget.verticalScrollBar()
self._scroll = self.vbar.value() == self.vbar.maximum()
def networkInterface(self):
self.interfaceDiag = InterfacePick()
self.interfaceDiag.exec_()
if hasattr(self.interfaceDiag, 'interfaceIP') and hasattr(self.interfaceDiag, 'interfaceName'):
self.networkIP = self.interfaceDiag.interfaceIP
self.interfbtn.setText(self.interfaceDiag.interfaceName)