Bit of formatting, ping, and one typo

This commit is contained in:
Kaushik 2021-12-24 23:07:51 +05:30
parent 3cc3aa40f8
commit e1ef9be2d9
4 changed files with 52 additions and 18 deletions

View File

@ -76,7 +76,9 @@ class NetworkMonitor(QMainWindow):
if self.interfaceSelected == None: if self.interfaceSelected == None:
self.interfaceDialog() self.interfaceDialog()
print(f"Monitoring - {self.interfaceSelected}") print("Monitoring - {}".format(
self.interfaceSelected
))
self.actionStart.setEnabled(False) self.actionStart.setEnabled(False)
self.actionStop.setEnabled(True) self.actionStop.setEnabled(True)
@ -139,10 +141,12 @@ class NetworkMonitor(QMainWindow):
self.setColortoRow(self.tableWidget, rowpos, QColor(173,191, 255)) self.setColortoRow(self.tableWidget, rowpos, QColor(173,191, 255))
elif(tableData['Protocol'] == 'UDP'): elif(tableData['Protocol'] == 'UDP'):
self.setColortoRow(self.tableWidget, rowpos, QColor(157,240,255)) self.setColortoRow(self.tableWidget, rowpos, QColor(157,240,255))
elif(tableData['Protocol'] == 'Other'):
self.setColortoRow(self.tableWidget, rowpos, QColor(125,125,146))
elif(tableData['Protocol'] == 'ARP'): elif(tableData['Protocol'] == 'ARP'):
self.setColortoRow(self.tableWidget, rowpos, QColor(157,240,77)) self.setColortoRow(self.tableWidget, rowpos, QColor(157,240,77))
elif(tableData['Protocol'] == 'ICMP'):
self.setColortoRow(self.tableWidget, rowpos, QColor(255, 182, 193))
elif(tableData['Protocol'] == 'Other'):
self.setColortoRow(self.tableWidget, rowpos, QColor(125,125,146))
def setColortoRow(self, table, rowIndex, color): def setColortoRow(self, table, rowIndex, color):

View File

@ -1,4 +1,3 @@
import sys
from PyQt5.QtGui import * from PyQt5.QtGui import *
from PyQt5.QtCore import * from PyQt5.QtCore import *
from PyQt5.QtWidgets import * from PyQt5.QtWidgets import *
@ -32,8 +31,8 @@ class NetworkMonitorThread(QObject):
counter = 0 counter = 0
while True: while True:
layer = packet.getlayer(counter) layer = packet.getlayer(counter)
if layer != None: if layer is not None:
if layer.name != "Padding": if layer.name is not "Padding":
layers.append(layer.name) layers.append(layer.name)
else: else:
break break
@ -102,7 +101,13 @@ class NetworkMonitorThread(QObject):
packet[TCP].ack, packet[TCP].ack,
packet[TCP].window packet[TCP].window
) )
elif ICMP in packet:
protocol = "ICMP"
info = "type={} code={} chksum={}".format(
packet[ICMP].type,
packet[ICMP].code,
packet[ICMP].chksum,
)
elif ARP in packet: elif ARP in packet:
protocol = "ARP" protocol = "ARP"
info = "hwtype={} ptype={} hwlen={} plen={} op={}".format( info = "hwtype={} ptype={} hwlen={} plen={} op={}".format(
@ -121,5 +126,5 @@ class NetworkMonitorThread(QObject):
count=0, count=0,
iface=self.interface, iface=self.interface,
prn=self.handlePacket, prn=self.handlePacket,
stop_filter={lambda x: self.sniffStatus()} stop_filter=lambda x: self.sniffStatus()
) )

29
ping.py
View File

@ -1,10 +1,8 @@
import sys
from PyQt5.QtGui import * from PyQt5.QtGui import *
from PyQt5.QtCore import * from PyQt5.QtCore import *
from PyQt5.QtWidgets import * from PyQt5.QtWidgets import *
from scapy.all import * from scapy.all import *
from scapy.layers.inet import IP from scapy.layers.inet import IP, ICMP, icmpcodes, icmptypes
from scapy.layers.inet import ICMP
class Ping(QWidget): class Ping(QWidget):
@ -31,10 +29,29 @@ class Ping(QWidget):
def startPing(self): def startPing(self):
if(len(self.host.text()) >= 1): if(len(self.host.text()) >= 1):
try: try:
packet = IP(dst=self.host.text(), ttl=10)/ICMP() packet = IP(dst=self.host.text())/ICMP()
output = sr1(packet, timeout=2) output = sr1(packet, timeout=2)
if output is not None: if output is not None:
self.result.setText(output.summary()) res_type = icmptypes[output.type]
except socket.gaierror as e: res_code = ""
if output.type in icmpcodes:
res_code = " - "+icmpcodes[output.type][output.code]
ping_time = int((output.time - packet.sent_time)*1000)
self.result.setText(
"Ping results:\nSummary: {}\n\nType:\t\t{}{}\nTime:\t\t{}ms\nSource:\t\t{}\nDestination:\t{}\
\nTTL:\t\t{}".format(
output.summary(),
res_type,
res_code,
ping_time,
packet[IP].src,
packet[IP].dst,
packet[IP].ttl
)
)
else:
self.result.setText("Request timed out.")
except socket.gaierror:
self.result.setText( self.result.setText(
"Invalid address/Could not get address info") "Invalid address/Could not get address info")

View File

@ -32,12 +32,20 @@ class TraceRoute(QWidget):
result, unans = traceroute( result, unans = traceroute(
target=self.host.text(), dport=80, verbose=0) target=self.host.text(), dport=80, verbose=0)
output = [] output = []
output.append("\tRoute path\tResponse time") output.append("\tRoute path\t\tResponse time")
result = sorted(result, key=lambda x: x[0].ttl)
for snd, rcv in result: for snd, rcv in result:
output.append( output.append(
str(f"{snd.ttl}\t{rcv.src}\t\t{(int((rcv.time - snd.sent_time)*1000))} ms")) str("{}\t{}\t\t{} ms".format(
output.append(f"\nUnanswered packets: {len(unans)}") snd.ttl,
rcv.src,
(int((rcv.time - snd.sent_time)*1000))
)))
output.append("\nUnanswered packets: {}".format(
len(unans)
))
self.result.setText('\n'.join(output)) self.result.setText('\n'.join(output))
except socket.gaierror as e: except socket.gaierror:
self.result.setText( self.result.setText(
"Invalid address/Could not get address info") "Invalid address/Could not get address info")