анализатор пакетов из соединения клиент-сервер (udp) python 2.7 (только) - PullRequest
0 голосов
/ 11 декабря 2018

Я написал клиент, который отправляет пакеты на сервер, и теперь мне нужно создать злоумышленника, который прослушивает (на локальном хосте) соединение между клиентом и сервером и печатает содержимое пакета, злоумышленник не является частью соединения,У меня возникли проблемы с тем, что я знаю, что мне нужно использовать raw сокет, но я не знаю, почему я не могу этого сделать.

сервер:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 12321)
print >> sys.stderr, 'starting up on localhost port 12321'
sock.bind(server_address)

while True:
    data, address = sock.recvfrom(100)
    if data:
        sent = sock.sendto(data, address)
        print >> sys.stderr, 'sent %s bytes back to %s' % (sent, address)

клиент:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 12321)
i = 0

    while True:
        f = open("poem.txt", "r")
        for line in f:
            time.sleep(3)
            i += 1
            sent = sock.sendto(line, server_address)
            data, server = sock.recvfrom(100)
        f.close()

    print >>sys.stderr, 'closing socket'
    sock.close()

противник:

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
s.bind(("localhost", 1))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)
while True:
   print s.recvfrom(12321)

В противнике я получаю все виды сообщений, но не те, которые отправляет клиент (клиент отправил песню).пожалуйста, помогите ...

1 Ответ

0 голосов
/ 15 декабря 2018

проблема связана с вашей привязкой, socket.bind () принимает кортеж адреса (IP, PORT)

ваш клиент связан с портом 12321, но ваш злоумышленник настроен на порт 1

s.bind(("localhost", 1)) #change 1 to 12321

Кроме того, socket.recvfrom () получает размер буфера в качестве аргумента, а не порт.

   print s.recvfrom(12321) #change to buffer size

Посмотрите документацию для сокетов: https://docs.python.org/2/library/socket.html

также, могу ли я предложить использовать инструмент Scapy, его легко использовать как в Windows, так и в Linux

просто наберите pip install scapy в вашем cmd и в Windows, убедитесь, что вы установили npcap среди scapy https://nmap.org/npcap/windows-10.html и вы готовы перейти

после установки scapy, тогда вам просто понадобится строка, подобная этой:

sniff(filter="udp and host 127.0.0.1 and dst port 12321", prn=lambda x:x.sprintf("{IP:%IP.src% -> %IP.dst%\n}{Raw:%Raw.load%\n}"))
...