السلام عليكم ورحمة الله وبركاته
بدأت في كتابة أصدار جديد من TuxCut وقررت أستخدام مكتبة Scapy
المكتبة أكثر من رائعة وتقدم تسهيلات ممتازة لأي مدير شبكة , أثناء العمل تواجهني عدة مشاكل لذا سأضع المشاكل هنا لعلي أجد مساعدة
توجد دالة في scapy تسمي arping وهي تقوم بعمل مسح للشبكة المحلية عن طريق arp requests ويمكن أستخدامها بالكود التالي
from scapy.all import arping
def arping_ip(net):
hosts_dict = {}
ans,unans = arping(net,timeout=1,verbose=False)
for s,r in ans.res:
hosts_dict.setdefault(r.psrc,r.src)
print hosts_dict
gw_ip = '192.168.1.1'
arping_ip(gw_ip) # This will get the MAC of the gateway
arping_ip(gw_ip+'/24') # This will scan the Whole LANهذا الجزء من الكود يعمل بشكل ممتاز وبلا أخطاء ولكن عند أستخدام هذا الكود في داخل كلاس TuxCut تبدأ المشاكل في الظهور
from scapy.all import arping
import subprocess as sp
from PyQt4 import QtCore,QtGui,uic
class TuxCut(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
uic.loadUi('ui/MainWindow.ui',self)
self._gwMAC=None
self._isProtected = False
self._isFedora = True
self._gwIP = self.default_gw()
if not self._gwIP==None:
self.arping_ip(self._gwIP)
else:
print "You Are not connected to any network"
self.show_Window()
def show_Window(self):
screen = QtGui.QDesktopWidget().screenGeometry()
size = self.geometry()
self.move((screen.width()-size.width())/2, (screen.height()-size.height())/2)
self.table_hosts.setColumnWidth(0,150)
self.table_hosts.setColumnWidth(1,150)
self.table_hosts.setColumnWidth(2,75)
self.show()
def default_gw(self):
args = ['route','list']
gwip = sp.Popen(['ip','route','list'],stdout = sp.PIPE)
for line in gwip.stdout:
if 'default' in line:
return line.split()[2]
def arping_ip(self, net):
print net
hosts_dict = {}
ans,unans = arping(net,timeout=1,verbose=False)
for s,r in ans.res:
hosts_dict.setdefault(r.psrc,r.src)
print hosts_dictعند تمرير self._gwIP لدالة arping يعمل الكود ويعيد لي قاموس بقيمة ip و mac للراوتر
root /home/ahmed/Projects/tuxcut # python tuxcut.py
WARNING: No route found for IPv6 destination :: (no default route?)
192.168.1.1
{'192.168.1.1': 'cd:48:7a:ff:cd:48'}لكن عند أضافة /24 لـ IP الراوتر لكي يعمل مسح شامل لكل أجهزة الشبكة يأتي Error لا أفهمه
root /home/ahmed/Projects/tuxcut # python tuxcut.py
WARNING: No route found for IPv6 destination :: (no default route?)
192.168.1.1/24
Traceback (most recent call last):
File "tuxcut.py", line 7, in <module>
tux = TuxCut()
File "/home/ahmed/Projects/tuxcut/TuxCut.py", line 20, in __init__
self.arping_ip(self._gwIP+'/24')
File "/home/ahmed/Projects/tuxcut/TuxCut.py", line 48, in arping_ip
ans,unans = arping(net,timeout=1,verbose=False)
File "/usr/lib/python2.7/site-packages/scapy/layers/l2.py", line 444, in arping
filter="arp and arp[7] = 2", timeout=timeout, iface_hint=net, **kargs)
File "/usr/lib/python2.7/site-packages/scapy/sendrecv.py", line 339, in srp
a,b,c=sndrcv(s ,x,*args,**kargs)
File "/usr/lib/python2.7/site-packages/scapy/sendrecv.py", line 124, in sndrcv
inp, out, err = select(inmask,[],[], remaintime)
select.error: (4, 'Interrupted system call')أتمني أن أجد حل لهذه المشكلة الغريبة فالكود هو نفسه في الحالتين ولكن في أحدهما يعمل وفي اﻷخري لا يعمل
لمن يريد التجربة عليه تثبيت حزمة python-scapy