Форум программистов, компьютерный форум CyberForum.ru

Python: Сети

Войти
Регистрация
Восстановить пароль
 
Nikitc
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 5
#1

Как в Python 3 получить icmp пакет - Python

28.04.2016, 09:34. Просмотров 900. Ответов 5

Пишу сканер портов на python, нужно получить icmp пакет для определения типа и кода, как это сделать на windows? пишу следующий код, но приходит IP заголовок и UDP пакет
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
with socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) as sniffer:
        sniffer.bind((host, 0))
        sniffer.settimeout(3)
        with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
            try:
 
                sock.sendto(b'', (host, port))
                data = sniffer.recv(1024)
 
                a = struct.unpack("!BBHHH", data)
                print(a)
            except Exception as e:
                self.port_dict.append(port)
                print(e)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2016, 09:34     Как в Python 3 получить icmp пакет
Посмотрите здесь:

Python Python socket telnet, потоки и ответ сервера
Python Написать скрипт на языке Python
Функции python совместимость с с telnetlib Python
Python Windows socket server python + socket client js
Python Сокеты Python
Python Python подключение по ssh с автоматическим вводом пароля
HTTP. Python 27 Python

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex925
2386 / 2052 / 478
Регистрация: 19.03.2012
Сообщений: 7,988
28.04.2016, 11:10     Как в Python 3 получить icmp пакет #2
https://github.com/graywolf/pyicmp
Jabbson
Модератор
Эксперт по компьютерным сетям
3071 / 2172 / 433
Регистрация: 03.11.2009
Сообщений: 6,868
Записей в блоге: 3
28.04.2016, 11:51     Как в Python 3 получить icmp пакет #3
Python
1
2
3
4
5
6
7
8
9
10
import socket
import struct
 
def listen():
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
    while 1:
        data, _ = s.recvfrom(1508)
        print('icmp: Type: {} Code: {}'.format(*struct.unpack('BB', data[20:22])))
 
listen()
Добавлено через 2 минуты
ааа... виндоус
Nikitc
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 5
28.04.2016, 14:43  [ТС]     Как в Python 3 получить icmp пакет #4
Да, нужно именно для windows, решения выше не помогли
Jabbson
Модератор
Эксперт по компьютерным сетям
3071 / 2172 / 433
Регистрация: 03.11.2009
Сообщений: 6,868
Записей в блоге: 3
28.04.2016, 14:56     Как в Python 3 получить icmp пакет #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
win:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import socket
import struct
 
def listen(host):
    s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
    s.bind((host,0))
    s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
    
    while 1:
        data = s.recvfrom(65535)[0]
        ip_header = data[0:20]
        ip_struct = struct.unpack('!BBHHHBBH4s4s' , ip_header)
 
        if socket.inet_ntoa(ip_struct[9]) == host:
            print('{} --> icmp: Type: {}, Code: {}'.format(socket.inet_ntoa(ip_struct[8]), 
                                                           *struct.unpack('BB', data[20:22])))
 
listen(socket.gethostbyname(socket.gethostname()))
слушает, если видит icmp в свою сторону - пишет отправителя, тип и код.
Nikitc
0 / 0 / 0
Регистрация: 28.04.2016
Сообщений: 5
28.04.2016, 18:21  [ТС]     Как в Python 3 получить icmp пакет #6
Круто! спасибо, помогло
Yandex
Объявления
28.04.2016, 18:21     Как в Python 3 получить icmp пакет
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru