|
@@ -10,7 +10,8 @@ import time
|
|
|
# сканируем подсеть
|
|
|
SUBNET = '192.168.31.0/24'
|
|
|
# волшебная строка, которую мы будем искать в ICMP-ответах
|
|
|
-MESSAGE = 'PYTHONRULES!'
|
|
|
+# MESSAGE = 'PYTHONRULES!'
|
|
|
+MESSAGE = 'asdfaskdflajdskfjalsjdf'
|
|
|
|
|
|
class IP:
|
|
|
def __init__(self, buff):
|
|
@@ -55,14 +56,26 @@ class ICMP:
|
|
|
def udp_sender():
|
|
|
with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sender:
|
|
|
for i in range(10):
|
|
|
- # sender.sendto(bytes(MESSAGE, 'utf8'), ('192.168.31.100', 65212))
|
|
|
- sender.sendto(bytes(MESSAGE, 'utf8'), ('8.8.8.8', 65212))
|
|
|
+ sender.sendto(bytes(MESSAGE, 'utf8'), ('77.88.44.242', 5555))
|
|
|
+ print('send icmp')
|
|
|
+ # sender.sendto(bytes(MESSAGE, 'utf8'), ('8.8.8.8', 65212))
|
|
|
time.sleep(0.3)
|
|
|
# for ip in ipaddress.ip_network(SUBNET).hosts():
|
|
|
# print(bytes(MESSAGE, 'utf8'), (str(ip), 65212))
|
|
|
# sender.sendto(bytes(MESSAGE, 'utf8'), (str(ip), 65212))
|
|
|
|
|
|
|
|
|
+def icmp_sender():
|
|
|
+ icmp_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)
|
|
|
+ icmp_packet = struct.pack('!BBHHH', 8, 0, 0, 0, 1) + b'pingdata'
|
|
|
+
|
|
|
+ crc = 0
|
|
|
+ for i in range(0, len(icmp_packet), 2):
|
|
|
+ crc += (icmp_packet[i] << 8) + icmp_packet[i + 1]
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
class Scanner:
|
|
|
def __init__(self, host):
|
|
|
self.host = host
|
|
@@ -89,8 +102,9 @@ class Scanner:
|
|
|
# создаем IP-заголовок из первых 20 байт
|
|
|
ip_header = IP(raw_buffer[0:20])
|
|
|
# нас интересует ICMP
|
|
|
- print(raw_buffer)
|
|
|
+ # print(raw_buffer)
|
|
|
print(ip_header.src_address, ip_header.dst_address)
|
|
|
+ # print(ip_header.src_address)
|
|
|
if ip_header.protocol == 'ICMP':
|
|
|
print('ICMP')
|
|
|
offset = ip_header.ihl * 4
|