LINUX.ORG.RU
ФорумAdmin

Помогите разобраться с утилитой Scapy

 , ,


0

1

Здраствуйте! Недавно нашел отличную библиотеку под Python для генерирования пакетов, сниффинга и так далее, она мне кажется очень перспективной, но не могу разобраться.............

Отправим стандартный эхо на компьютер в ЛС:

>>> a = sr(IP(dst="10.2.224.65")/ICMP())
Begin emission:
Finished to send 1 packets.
............................................................................................................^C
Received 108 packets, got 0 answers, remaining 1 packets
>>> a
(<Results: TCP:0 UDP:0 ICMP:0 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:1 Other:0>)
Результатов нет, хотя хост пингуется...
[shipa@shipa-pc ~]$ ping 10.2.224.65
PING 10.2.224.65 (10.2.224.65) 56(84) bytes of data.
64 bytes from 10.2.224.65: icmp_req=1 ttl=64 time=0.032 ms
64 bytes from 10.2.224.65: icmp_req=2 ttl=64 time=0.029 ms
64 bytes from 10.2.224.65: icmp_req=3 ttl=64 time=0.031 ms
64 bytes from 10.2.224.65: icmp_req=4 ttl=64 time=0.029 ms
64 bytes from 10.2.224.65: icmp_req=5 ttl=64 time=0.031 ms
^C
--- 10.2.224.65 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3999ms
rtt min/avg/max/mdev = 0.029/0.030/0.032/0.005 ms
[shipa@shipa-pc ~]$ 


Ответ на: комментарий от power

Да от суперюзера. Да я в универе тестил, там какой-то суровый файрвол, из дома все лучше:) Но все равно существует пара вопросов: 1)Почему нет аргумента «сколько пакетов получить»? зачем мне 142 ответа, если я уже получил 30... Нету чего-нибудь вроде «ping -c 1»?

>>> a = sr(IP(dst="87.250.250.1-100")/ICMP())
Begin emission:
*.**.*.****.******.**.**.***..**..*..*****Finished to send 100 packets.
.*..................................................................................................^C
Received 142 packets, got 30 answers, remaining 70 packets
>>> a
(<Results: TCP:0 UDP:0 ICMP:30 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:70 Other:0>)
>>> 
2)если я сканирую ЛС, существующие хосты отвечают, а для не существующих я получаю кучу ошибок...
>>> a = sr(IP(dst="192.168.0.1-100")/ICMP())
Begin emission:
*.....WARNING: Mac address to reach destination not found. Using broadcast.
................WARNING: Mac address to reach destination not found. Using broadcast.
.............................WARNING: more Mac address to reach destination not found. Using broadcast.

shipa
() автор топика
Ответ на: комментарий от shipa

Ничем помочь не могу - первый раз вижу эту библиотеку. Смотри документацию или исходники :)

power
()
Ответ на: комментарий от pyatak123
[shipa@shipa-pc ~]$ sudo scapy
Пароль: 
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: No route found for IPv6 destination :: (no default route?)
INFO: Can't import python Crypto lib. Won't be able to decrypt WEP.
INFO: Can't import python Crypto lib. Disabled certificate manipulation tools
Welcome to Scapy (2.2.0)
>>> 
>>> 
>>> a = sr1(IP(dst="192.168.0.1-100")/ICMP())
Begin emission:
.*..................WARNING: Mac address to reach destination not found. Using broadcast.
...........WARNING: Mac address to reach destination not found. Using broadcast.
....................WARNING: more Mac address to reach destination not found. Using broadcast.
........^CWARNING: Mac address to reach destination not found. Using broadcast.
WARNING: Mac address to reach destination not found. Using broadcast.
^Z
[1]+  Stopped                 sudo scapy
[shipa@shipa-pc ~]$ 
shipa
() автор топика
Ответ на: комментарий от shipa

зачем мне 142 ответа, если я уже получил 30

Для статистики потерей пакетов и задержки их доставки. Чем больше выборка, тем более точными будут результаты - никто не гарантирует, что 31ый пакет пройдет так же как и остальные 30 и совсем не факт, что ты увидишь лишние задержки на канале на 30 пакетах (ну, конечно, если ты не соседнюю машину по LAN пингуешь).

BigAlex ★★★
()
Ответ на: комментарий от shipa

Смотри исходники - я же не телепат. Но судя по выхлопу эта либа есть очень примитивный враппер к консольным тулзам и если нельзя каким-либо способом подсунуть туда соответсвующие ключи, то ответ - никак.

BigAlex ★★★
()
Ответ на: комментарий от BigAlex

Возможные поля:

>>> ls(IP())
version    : BitField             = 4               (4)
ihl        : BitField             = None            (None)
tos        : XByteField           = 0               (0)
len        : ShortField           = None            (None)
id         : ShortField           = 1               (1)
flags      : FlagsField           = 0               (0)
frag       : BitField             = 0               (0)
ttl        : ByteField            = 64              (64)
proto      : ByteEnumField        = 0               (0)
chksum     : XShortField          = None            (None)
src        : Emph                 = '127.0.0.1'     (None)
dst        : Emph                 = '127.0.0.1'     ('127.0.0.1')
options    : PacketListField      = []              ([])
>>> ls(ICMP())
type       : ByteEnumField        = 8               (8)
code       : MultiEnumField       = 0               (0)
chksum     : XShortField          = None            (None)
id         : ConditionalField     = 0               (0)
seq        : ConditionalField     = 0               (0)
ts_ori     : ConditionalField     = 86316378        (86316378)
ts_rx      : ConditionalField     = 86316378        (86316378)
ts_tx      : ConditionalField     = 86316378        (86316378)
gw         : ConditionalField     = '0.0.0.0'       ('0.0.0.0')
ptr        : ConditionalField     = 0               (0)
reserved   : ConditionalField     = 0               (0)
addr_mask  : ConditionalField     = '0.0.0.0'       ('0.0.0.0')
unused     : ConditionalField     = 0               (0)
>>> 
А создаются они вот таким образом:
__init__(self, _pkt='', post_transform=None, _internal=0, _underlayer=None, **fields)
Help on function sr in module scapy.sendrecv:

sr(x, filter=None, iface=None, nofilter=0, *args, **kargs)
    Send and receive packets at layer 3
    nofilter: put 1 to avoid use of bpf filters
    retry:    if positive, how many times to resend unanswered packets
              if negative, how many times to retry when no more packets are answered
    timeout:  how much time to wait after the last packet has been sent
    verbose:  set verbosity level
    multi:    whether to accept multiple answers for the same stimulus
    filter:   provide a BPF filter
    iface:    listen answers only on the given interface

shipa
() автор топика
Ответ на: комментарий от BigAlex

Ладно, Бох с количеством, а как решить проблему: «WARNING: more Mac address to reach destination not found. Using broadcast.» ?

shipa
() автор топика
15 июня 2012 г.
Ответ на: комментарий от shipa

paket = IP(dst='192.168.1.1')/ICMP sr(a, timeout=5) sr - используйте для одного адреса Для широковещательной рассылки смотрите arping('192.168.1-5.*')

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.