المحتويات

المقدمة

المتطلبات الأساسية

المتطلبات

المكونات المستخدمة

التركيب

إنشاء حزمة

إرسال حركة مرور

التحقق من الصحة

المقدمة

يصف هذا وثيقة Scapy، أداة معالجة حزم Python لمحولات N9K لإنشاء ومعالجة الحزم بسهولة.

المتطلبات الأساسية

قم بتنزيل Scapy إلى ذاكرة التمهيد للمحول.

لتنزيل Scapy، أستخدم الارتباط من GitHub GitHub-SCAPY

المتطلبات

توصي Cisco بأن تكون لديك معرفة بالمواضيع التالية:

- المحول Nexus 9000/3000 Switch.

المكونات المستخدمة

- N9K-C9396PX

تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك قيد التشغيل، فتأكد من فهمك للتأثير المحتمل لأي أمر.

التركيب

قم بتنزيل التعليمة البرمجية Scapy واستخراجها إلى ذاكرة الفلاش الخاصة بتمهيد المحول لديك؛ يتوفر FTP أو SFTP أو SCP.

قم بتمكين الميزة، في هذه الحالة، SCP.

switch(config)# feature scp-server

switch(config)# sh feature | i scp

scpServer              1          enabled

انسخ الملف إلى المحول من الكمبيوتر المحمول.

scp scapy-vxlan-master.zip admin@10.88.164.13:/

بمجرد أن تكون الصورة في ذاكرة Boot Flash (الذاكرة المؤقتة)، يلزم فك ضغطها. ويجب تمكين ميزة أساسية وإزالتها من BASH.

switch(config)# feature bash

switch(config)# run bash

bash-4.3$ sudo su -

root@switch#cd /bootflash

root@switch#unzip scapy-vxlan-master.zip

بمجرد فك ضغطها، يمكن تحديد موقع الملفات باستخدام الأمر dir على ذاكرة التمهيد المؤقتة، المضغوطة وغير المضغوطة.

switch# dir bootflash: | i i scapy

4096    Jul 09 18:00:01 2019  scapy-vxlan-master/

1134096    Jul 19 23:35:26 2023  scapy-vxlan-master.zip

والآن أصبحت لعبة Scapy متاحة.

لاحظ أنك تحتاج لاستدعاء البرنامج بامتيازات الجذر، كما تحتاج أيضا إلى الانتقال إلى دليل Scapy.

switch(config)# run bash

Enter configuration commands, one per line. End with CNTL/Z.

bash-4.2$ sudo su -

root@switch#cd /

root@switch#cd bootflash/scapy-vxlan-master       <<< Move to the scapy folder scapy-vxlan-master

root@switch#python                                <<< Run python once located inside the folder

Python 2.7.2 (default, Mar  9 2015, 15:52:40)

[GCC 4.6.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> from scapy.all import *                       <<< Import libraries from scapy

>>>

إنشاء حزمة

هذا مثال على كيفية إنشاء حزمة IP أساسية لتوضيح إجراء إنشاء حركة مرور البيانات باستخدام Scapy.

Create l2 source and destination mac addresses.

>>> l2=Ether()

>>> l2.src='00:aa:12:34:12:34'

>>> l2.src='00:ff:aa:bb:cc:11'

Create l3 source and destination IP addresses.

>>> l3=IP()

>>> l3.src='10.1.1.1'

>>> l3.dst='10.2.2.2'

آخر إمكانية أن يرسل ربط من PCAP مبرد التقط سابقا. ويتم تحقيق ذلك باستخدام الأمر rdpcap.

مخرجات ذلك الأمر هي قائمة بايثون تحتوي على كل الحزم الملتقطة في ملف PCAP الخاص بك. في هذا المثال، يحتوي traffic.pcap على 10 حزم ويتم تعيين هذه الحزم إلى القائمة التي تم إنشاؤها على هيئة PKTS.

>>> pkts = rdpcap('bootflash/traffic.pcap')

>>> len(pkts)

10

>>> type(pkts)

<class 'scapy.plist.PacketList'>

ملاحظة: يلزم تخزين ملف PCAP في ذاكرة التمهيد المؤقتة للمحول.

إرسال حركة مرور

بمجرد إنشاء الحزمة، نستخدم الأمر sendp لبدء إرسال الحزمة الخاصة بنا عبر الواجهة المحددة.

>>> packet = l2/l3.                  << packet now have the values for source and destination declared on creating a packet.

>>> sendp(packet, iface='Eth1-1').   << Sending the packet through interface eth1/1

.

Sent 1 packets.

أنت يستطيع بعد ذلك تكررت من خلال قائمة الربط أن يرسل الحركة مرور عبر القارن أنت تعين.

>>> while True:

...  for i in range(len(pkts)):         <<< It goes through the list pkts with 10 packets and send 1 by 1

...   sendp(pkts[i], iface='Eth1-1')

...

.

Sent 1 packets.

.

Sent 1 packets.

ملاحظة: لا يتاح إلا الوصول إلى وضع منافذ المحول لكي يتم إستخدامه. وإلا، فإنه يعرض خطأ.

مثال على الخطأ:

>>> sendp(l2/l3, iface='Eth1-6')

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

File "scapy/sendrecv.py", line 335, in sendp

socket = socket or conf.L2socket(iface=iface, *args, **kargs)

File "scapy/arch/linux.py", line 477, in __init__

set_promisc(self.ins, self.iface)

File "scapy/arch/linux.py", line 165, in set_promisc

mreq = struct.pack("IHH8s", get_if_index(iff), PACKET_MR_PROMISC, 0, b"")

File "scapy/arch/linux.py", line 380, in get_if_index

return int(struct.unpack("I", get_if(iff, SIOCGIFINDEX)[16:20])[0])

File "scapy/arch/common.py", line 59, in get_if

ifreq = ioctl(sck, cmd, struct.pack("16s16x", iff.encode("utf8")))

IOError: [Errno 19] No such device

ضمنت القارن يكون usable، ركضت ال ifconfig أمر، القارن ينبغي كنت عددت في هناك.

bash-4.3$ ifconfig | grep Eth

Eth1-1 Link encap:Ethernet HWaddr 00:a2:ee:74:4b:88

Eth1-2 Link encap:Ethernet HWaddr 00:a2:ee:74:4b:89

Eth1-5 Link encap:Ethernet HWaddr 00:a2:ee:74:4b:8c

Eth1-6 Link encap:Ethernet HWaddr 00:a2:ee:74:4b:8d

Eth1-8 Link encap:Ethernet HWaddr 00:a2:ee:74:4b:8f

Eth1-11 Link encap:Ethernet HWaddr 00:a2:ee:74:4b:c1

...

التحقق من الصحة

يمكنك إستخدام الأمر للتحقق من أي حزمة محددة.

>>> pkts[5].show()

###[ Ethernet ]###

dst       = 01:00:0c:cc:cc:cd

src=58:97:bd:00:a4:f2

type      = 0x8100

###[ 802.1Q ]###

prio      = 6

id        = 0

vlan      = 104

type      = 0x32

###[ LLC ]###

dsap      = 0xaa

ssap      = 0xaa

ctrl      = 3

###[ SNAP ]###

OUI       = 0xc

code      = 0x10b

###[ Spanning Tree Protocol ]###

proto     = 0

version   = 2

bpdutype  = 2

bpduflags = 60

rootid    = 32872

rootmac   = 58:97:bd:00:a4:f1

pathcost  = 0

bridgeid  = 32872

bridgemac = 58:97:bd:00:a4:f1

portid    = 32769

age       = 0.0

maxage    = 20.0

hellotime = 2.0

fwddelay  = 15.0

###[ Raw ]###

load      = '\x00\x00\x00\x00\x02\x00h'