شاید هنگام پیاده سازی یک حمله نیاز داشته باشید که default gateway رو بدست بیارید وجهت اتوماتیک سازی کارها نیاز به ورودی کاربر پیدا نکنید. مثلا برای حمله ARP بطور خودکار gateway آی پی خود را در شبکه بدست بیاورید و حمله را علیه آن انجام دهید و یا حالت های دیگر.
در فایل config.py کلاسی به نام conf وجود دارد.این کلاس شامل تنظیمات scapy است. براحتی میتونیم با دستور زیر این تنظیمات رو مشاهده کنیم:
root@4XMen:~# root@4XMen:~# python Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from scapy.all import * WARNING: No route found for IPv6 destination :: (no default route?) >>> print conf ASN1_default_codec = <ASN1Codec BER[1]> AS_resolver = <scapy.as_resolvers.AS_resolver_multi instance at 0x1954d40> BTsocket = <BluetoothL2CAPSocket: read/write packets on a connected L2CAP ... L2listen = <L2ListenSocket: read packets at layer 2 using Linux PF_PACKET ... L2socket = <L2Socket: read/write packets at layer 2 using Linux PF_PACKET ... L3socket = <L3PacketSocket: read/write packets at layer 3 using Linux PF_P... auto_fragment = 1 checkIPID = 0 checkIPaddr = 1 checkIPsrc = 1 check_TCPerror_seqack = 0 color_theme = <DefaultTheme> commands = arpcachepoison : Poison target's cache with (your MAC,victim's ... debug_dissector = 0 debug_match = 0 default_l2 = <class 'scapy.packet.Raw'> ethertypes = </etc/ethertypes/ > except_filter = '' extensions_paths = '.' histfile = '/root/.scapy_history' iface = 'ppp0' iface6 = 'lo' interactive = False ipv6_enabled = True l2types = 0x1 <- Dot3 (802.3) 0x1 <-> Ether (Ethernet) 0xc -> IP (IP) 0x1... l3types = 0x3 -> IP (IP) 0x800 <-> IP (IP) 0x806 <-> ARP (ARP) 0x86dd <->... layers = Packet : None NoPayload : None Raw : Raw Padding : Padding ASN1... load_layers = ['l2', 'inet', 'dhcp', 'dns', 'dot11', 'gprs', 'hsrp', 'inet6'... logLevel = 30 manufdb = </usr/share/wireshark/manuf/ > mib = <MIB/ > neighbor = Dot3 -> SNAP Ether -> LLC Ether -> ARP Dot3 -> IP Ether -> Dot1... netcache = arp_cache: 0 valid items. Timeout=120s in6_neighbor: 0 valid it... noenum = <Resolve []> padding = 1 prog = display = 'display' dot = 'dot' hexedit = 'hexer' pdfreader = '... promisc = 1 prompt = '>>> ' protocols = </etc/protocols/ pim ip ax_25 esp tcp ah mpls_in_ip ipv6_opts x... raw_layer = <class 'scapy.packet.Raw'> resolve = <Resolve []> route = Network Netmask Gateway Iface Output IP 127.0.0.0 255.0.0.0 0.0... route6 = Destination Next Hop iface src candidates ::1/128 :: lo ::1 services_tcp = </etc/services-tcp/ kpop noclog svn cmip_man z3950 rootd gds_... services_udp = </etc/services-udp/ noclog cmip_man z3950 rootd gds_db afs3_r... session = '' sniff_promisc = 1 stats_classic_protocols = [<class 'scapy.layers.inet.TCP'>, <class 'scapy.la... stats_dot11_protocols = [<class 'scapy.layers.inet.TCP'>, <class 'scapy.laye... stealth = 'not implemented' temp_files = [] teredoPrefix = '2001::' teredoServerPort = 3544 use_dnet = False use_pcap = False verb = 2 version = '2.0.1' warning_threshold = 5 wepkey = '' >>>
خوب در این کلاس شی به نام route موجود است که این شی با استفاده از فایل route.py که متخص کار با جدول مسیریابی در سیستم نوشته شده است مقداردهی خواهد شد. حال با پایتون سعی میکنیم تا این شی از کلاس را پرینت کنیم و محتوا را مشاهده کنیم. پس مانند زیر دستور ها را می نویسیم :
>>> >>> print conf.route Network Netmask Gateway Iface Output IP ۱۲۷.۰.۰.۰ ۲۵۵.۰.۰.۰ ۰.۰.۰.۰ lo 127.0.0.1 ۰.۰.۰.۰ ۰.۰.۰.۰ ۱۰.۶۴.۶۴.۶۴ ppp0 10.5.113.240 ۱۰.۶۴.۶۴.۶۴ ۲۵۵.۲۵۵.۲۵۵.۲۵۵ ۰.۰.۰.۰ ppp0 10.5.113.240 ۱۹۲.۱۶۸.۱۰.۰ ۲۵۵.۲۵۵.۲۵۵.۰ ۰.۰.۰.۰ eth0 0.0.0.0 ۱۹۲.۱۶۸.۵۰.۰ ۲۵۵.۲۵۵.۲۵۵.۰ ۰.۰.۰.۰ eth0 0.0.0.0 >>>
خوب میبینیم که routing table درون سیستممان را بطور کامل برایمان نشان داد که default gateway نیز شامل آنهاست و چیزی که میخواهیم بدست آوریم. parse نمودن بدین صورت زیاد جالب نخواهد بود بنابراین بازهم از conf.route به فیلد دیگری مراجع میکنیم تا اطلاعات را بصورت بهتری متناسب با کاری که میخواهیم انجام دهیم به نمایش درآید.بدین صورت:
>>> >>> print conf.route.routes [(2130706432L, 4278190080L, '0.0.0.0', 'lo', '127.0.0.1'), (0L, 0L, '10.64.64.64', 'ppp0', '10.5.113.240'), (171982912L, 4294967295L, '0.0.0.0', 'ppp0', '10.5.113.240'), (3232238080L, 4294967040L, '0.0.0.0', 'eth0', '0.0.0.0'), (3232248320L, 4294967040L, '0.0.0.0', 'eth0', '0.0.0.0')] >>>
براحتی میتوان اطلاعات شبکه هایمان را داشته باشیم و براساس هرفیلدی که لازم است داده ها را فیلتر نماییم. خوب جهت راحتی کار ما تابعی مینویسیم که پارامتر ورودی IP موردنظرمان و خروجی نیز gateway همان IP ورودی خواهد بود:
#!/usr/bin/env python ''' Author : AHA @ XMen Example: get_gateway('10.10.10.20') ''' import logging logging.getLogger("scapy.runtime").setLevel(logging.ERROR) from scapy.all import * def get_gateway(ip_param): gateways='' for route_line in conf.route.routes: if (route_line[4]==ip_param) and (route_line[2]!='0.0.0.0'): gateways=route_line[2] return gateways
دیدگاهتان را بنویسید لغو پاسخ