Сетевая функция для фильтрации / отбрасывания пакетов - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь реализовать сетевую функцию без сохранения состояния в python, которая будет прослушивать входящие пакеты и затем решать, являются ли они "хорошими" или "плохими" пакетами.Если они «хорошие», я хочу, чтобы программа пересылала пакеты (в другую сеть / IP), а если они плохие, я хочу отбросить их.У меня уже есть работающая часть сниффинга, но я действительно изо всех сил пытался заставить остальную часть функции работать.

У кого-нибудь есть какие-нибудь идеи?Спасибо

import socket               # Import socket module
import sys
from struct import *

s = socket.socket( socket.AF_PACKET , socket.SOCK_RAW , socket.ntohs(0x0003))

allowed_services = [80, 443]
allowed_hosts = []
for x in range(1, 11): #allows 192.168.0.1-10
   allowed_hosts += ['192.168.0.%d' % x]

while True:
   packet = s.recvfrom(65565)

   #packet string from tuple
   packet = packet[0]

   eth_length = 14
   eth_header = packet[:eth_length]
   eth = unpack('!6s6sH' , eth_header)
   eth_protocol = socket.ntohs(eth[2])

   #Parse IP packets, IP Protocol number = 8
   if eth_protocol == 8 :
        #Parse IP header
        #take first 20 characters for the ip header
        ip_header = packet[eth_length:20+eth_length]
        #now unpack them :)
        iph = unpack('!BBHHHBBH4s4s' , ip_header)
        version_ihl = iph[0]
        version = version_ihl >> 4
        ihl = version_ihl & 0xF

        iph_length = ihl * 4

        protocol = iph[6]
        saddr = socket.inet_ntoa(iph[8]);
        daddr = socket.inet_ntoa(iph[9]);

#       print 'Incoming packet from ' + str(saddr) +  ' going to ' + str(daddr) +  '\n'

        #TCP protocol
        if protocol == 6:
             t = iph_length + eth_length
             tcp_header = packet[t:t+20]

             #now unpack them :)
             tcph = unpack('!HHLLBBHHH' , tcp_header)
             sport = tcph[0]
             dport = tcph[1]

             if daddr in allowed_hosts and dport in allowed_services or saddr in allowed_hosts and sport in allowed_services:
                  print 'Good TCP packet (from %s) \n' % saddr
        else:
             print 'Bad Packet -> Dropping from %s \n Verify IP and/or Port\n' % saddr
             print '---------------------------------------------------------------\n'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...