commit
724662be42
1 changed files with 104 additions and 0 deletions
104
qt.py
Normal file
104
qt.py
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QTreeWidget, QTreeWidgetItem, QPushButton, QFileDialog, QLabel
|
||||||
|
from PyQt5.QtCore import Qt
|
||||||
|
from scapy.all import IP, UDP, Ether, sniff
|
||||||
|
import webbrowser
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Define the destination IP address and UDP ports to filter
|
||||||
|
destination_ip = '255.255.255.255' # Destination IP address
|
||||||
|
source_port = 14236 # Source port
|
||||||
|
destination_port = 14235 # Destination port
|
||||||
|
|
||||||
|
# Username and password for the miners
|
||||||
|
username = "root"
|
||||||
|
password = "root"
|
||||||
|
|
||||||
|
class IPReporter(QMainWindow):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.setWindowTitle("IP Reporter")
|
||||||
|
self.setGeometry(100, 100, 600, 400)
|
||||||
|
|
||||||
|
self.central_widget = QWidget()
|
||||||
|
self.setCentralWidget(self.central_widget)
|
||||||
|
|
||||||
|
self.layout = QVBoxLayout(self.central_widget)
|
||||||
|
|
||||||
|
self.tree = QTreeWidget()
|
||||||
|
self.tree.setHeaderLabels(["IP Address", "MAC Address"])
|
||||||
|
self.tree.setColumnWidth(1, 400)
|
||||||
|
self.layout.addWidget(self.tree)
|
||||||
|
|
||||||
|
self.tree.itemDoubleClicked.connect(self.open_in_browser)
|
||||||
|
|
||||||
|
self.start_button = QPushButton("Start")
|
||||||
|
self.start_button.clicked.connect(self.toggle_listening)
|
||||||
|
self.layout.addWidget(self.start_button)
|
||||||
|
|
||||||
|
self.export_button = QPushButton("Export")
|
||||||
|
self.export_button.clicked.connect(self.export_data)
|
||||||
|
self.layout.addWidget(self.export_button)
|
||||||
|
|
||||||
|
self.status_label = QLabel("Stopped")
|
||||||
|
self.layout.addWidget(self.status_label)
|
||||||
|
|
||||||
|
self.listening = False
|
||||||
|
|
||||||
|
def extract_packet_info(self, packet):
|
||||||
|
# Check if the packet is an IP packet with UDP layer
|
||||||
|
if IP in packet and UDP in packet:
|
||||||
|
# Extract the source IP address, source port, and destination port
|
||||||
|
source_ip = packet[IP].src
|
||||||
|
udp_source_port = packet[UDP].sport
|
||||||
|
udp_destination_port = packet[UDP].dport
|
||||||
|
|
||||||
|
# Check if the packet matches the specified destination IP address and UDP ports
|
||||||
|
if (packet[IP].dst == destination_ip and
|
||||||
|
udp_source_port == source_port and
|
||||||
|
udp_destination_port == destination_port):
|
||||||
|
# Extract the MAC address from the Ethernet layer
|
||||||
|
source_mac = packet[Ether].src
|
||||||
|
# Display the information in the tree view
|
||||||
|
self.tree.addTopLevelItem(QTreeWidgetItem([source_ip, source_mac]))
|
||||||
|
|
||||||
|
def listen_for_packets(self):
|
||||||
|
sniff(prn=self.extract_packet_info, filter="udp and ip", store=0)
|
||||||
|
|
||||||
|
def toggle_listening(self):
|
||||||
|
if not self.listening:
|
||||||
|
# Start listening for packets in a separate thread
|
||||||
|
threading.Thread(target=self.listen_for_packets, daemon=True).start()
|
||||||
|
self.start_button.setText("Stop")
|
||||||
|
self.status_label.setText("Listening...")
|
||||||
|
self.listening = True
|
||||||
|
else:
|
||||||
|
# Stop listening for packets (terminate the program)
|
||||||
|
self.start_button.setText("Start")
|
||||||
|
self.status_label.setText("Stopped")
|
||||||
|
self.listening = False
|
||||||
|
|
||||||
|
def export_data(self):
|
||||||
|
options = QFileDialog.Options()
|
||||||
|
file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "Text Files (*.txt);;All Files (*)", options=options)
|
||||||
|
if file_path:
|
||||||
|
with open(file_path, "w") as file:
|
||||||
|
for i in range(self.tree.topLevelItemCount()):
|
||||||
|
item = self.tree.topLevelItem(i)
|
||||||
|
ip_address = item.text(0)
|
||||||
|
mac_address = item.text(1)
|
||||||
|
file.write(f"IP Address: {ip_address}, MAC Address: {mac_address}\n")
|
||||||
|
self.status_label.setText(f"Data exported to {file_path}")
|
||||||
|
|
||||||
|
def open_in_browser(self, item):
|
||||||
|
ip_address = item.text(0)
|
||||||
|
url = f"http://{username}:{password}@{ip_address}"
|
||||||
|
webbrowser.open(url)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
window = IPReporter()
|
||||||
|
window.show()
|
||||||
|
sys.exit(app.exec_())
|
Loading…
Reference in a new issue