Использование Scapy

Install Scapy

Пакет Scapy включен в Network Security Toolkit (NST 28)

Verion 2.x
Documentation scapy
pip install --pre scapy
pip install --pre scapy[basic]
pip3 install scapy-python3

Version 3.x
В версии 3k поменялось имя на kamene (version 3k)
Github Kamene

Documentation kamene
Docum Kamene

Доступные комманды scapy можно посмотреть с помощью:
lsc()

Помощь по коммандам
help(rdpcap)

Дополнительные уровни contrib

Чтобы посмотреть дополнительные доступные уровни протоколов
list_contrib()
Для загрузки дополнительного протокола можно использовать следующую комманду:
load_contrib("ospf")
Для подключения nmap требуется следующая команда:
load_module("nmap")

Interactive using scapy

Изменение темы возможно с помощью:
conf.color_theme = [DefaultTheme, BrightTheme, RastaTheme, ColorOnBlackTheme, BlackAndWhite, HTMLTheme, LatexTheme]
conf.color_theme=BrightTheme()
conf.color_theme=ColorOnBlackTheme()

Создать пакет ICMP
p=IP(dst="8.8.8.8")/ICMP()
Изменить ttl
p.ttl=10
Удалить ttl(сбросить настройку)
del(p.ttl)
Посмотреть поле с указанием протокола
p[IP].dst
Указать флаги
p[TCP].flags="SA"
Payload используется для вывода информации выше третьего уровня, можно его использовать несколько раз
p.payload.flags="SA"
Диапазон значений можно задавать списком либо начальным и конечным значением
p=IP()/TCP(dport=[22,23,25])
p=IP()/TCP(dport=(1,1000))

_ (подчеркивание) – последний результат

Вывод в HEX формате
a=Ether()/IP(dst="www.slashdot.org")/TCP()/"GET /index.html HTTP/1.0 \n\n"
hexdump(a)

Reading pcap files
a=rdpcap("file_pcap.pcap")
Вывести dst всех считанных пакетов
[p.dst for p in a]

Основные команды с пакетом:

  • raw(pkt) assemble the packet
  • hexdump(pkt) have a hexadecimal dump
  • ls(pkt) have the list of fields values
  • pkt.summary() for a one-line summary
  • pkt.show() for a developed view of the packet
  • pkt.show2() same as show but on the assembled packet (checksum is calculated, for instance)
  • pkt.sprintf() fills a format string with fields values of the packet
  • pkt.decode_payload_as() changes the way the payload is decoded
  • pkt.psdump() draws a PostScript diagram with explained dissection
  • pkt.pdfdump() draws a PDF with explained dissection
  • pkt.command() return a Scapy command that can generate the packet !!!

Над группой пакетов:

  • summary() displays a list of summaries of each packet
  • nsummary() same as previous, with the packet number
  • conversations() displays a graph of conversations
  • show() displays the preferred representation (usually nsummary())
  • filter() returns a packet list filtered with a lambda function

Sending Packets

send() – посылает пакеты используя третий уровень, не обрабатывая ответы
send(IP(dst="192.168.180.231")/ICMP())
send(IP(dst="192.168.180.1")/fuzz(UDP()/NTP(version=4)),loop=1)

sendp() – посылает пакеты используя второй уровень, не обрабатывая ответы
sendp(rdpcap("/tmp/pcapfile"))
sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1")
send(IP(dst='127.0.0.1'), return_packets=True)

sr() – отправляет пакеты, но ожидает ответные пакеты(L3), аналог send()
srp() – отправляет пакеты, но ожидает ответные пакеты(L2), аналог sendp()
sr1() и srp1() – аналогичны sr() и srp(), только ожидают в ответ один пакет

У этих команд есть дополнительные параметры:

  • timeout в секундах
  • retry
  • filter

Пример сканирования портов
pkt=IP(dst="192.168.180.1")/TCP(dport=(1,100), flags="S")
ans, unans = sr(pkt)

Вывести результат сканирования портов в виде списка или на каждой строчке, где флаги равны SA
[f'Flags: {a[1][TCP].flags} Port: { a[1].sport }' for a in ans if a[1][TCP].flags==18]
print("\n".join([f'Flags: {a[1][TCP].flags} Port: { a[1].sport }' for a in ans if a[1][TCP].flags==18]))

Print Friendly, PDF & Email
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments