2016-01-01 3 views
2

Я пытаюсь выполнить ti tcp запрос (входящие) пакеты. как он описывает в книге питона черной шляпы, это код сниффера. но этот снифер не захватывает пакеты запроса tcp. Мне нужно захватить из рабочей среды Windows.Как захватить пакеты запроса tcp?

class IP(Structure): 
    _fields_ = [ 
     ("version", c_ubyte, 4), 
     ("ihl", c_ubyte, 4), 
     ("tos", c_ubyte), 
     ("len", c_ushort), 
     ("id", c_ushort), 
     ("offset", c_ushort), 
     ("ttl", c_ubyte), 
     ("protocol_num", c_ubyte), 
     ("sum", c_ushort), 
     ("src", c_uint32), 
     ("dst", c_uint32) 
    ] 

    def __new__(self, socket_buffer=None): 
     return self.from_buffer_copy(socket_buffer) 

    def __init__(self, socket_buffer=None): 

     # map protocol constants to their names 
     self.protocol_map = {1:"ICMP", 6:"TCP", 17:"UDP"} 

     self.src_address = socket.inet_ntoa(struct.pack("@I",self.src)) 
     self.dst_address = socket.inet_ntoa(struct.pack("@I",self.dst)) 

     # human readable protocol 
     try: 
      self.protocol = self.protocol_map[self.protocol_num] 
     except: 
      self.protocol = str(self.protocol_num) 

if os.name == "nt": 
    socket_protocol = socket.IPPROTO_IP 
else: 
    socket_protocol = socket.IPPROTO_ICMP 

sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol) 

sniffer.bind((host, 0)) 
sniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) 

# to set up promiscuous mode 
if os.name == "nt": 
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 

try: 
    while True: 
     # read in a packet 
     raw_buffer = sniffer.recvfrom(65565)[0] 

     # create an IP header from the first 20 bytes of the buffer 
     ip_header = IP(raw_buffer[0:]) 

     # print out the protocol that was detected and the hosts 
     print "Protocol: %s %s -> %s " % (ip_header.protocol, ip_header.src_address, ip_header.dst_address) 
+0

Вы работаете с правами администратора? –

+0

@JimGarrison Да, я работаю с правами администратора. Я попробовал как среду linux, так и windows – zathizh

+1

Являются ли эти пакеты в беспроводной или проводной сети? Если это беспроводная связь, вам может потребоваться установить ваш беспроводной адаптер в разрешающий режим. –

ответ

2

я использовал Wireshark. он захватывает все входящие и исходящие пакеты. но скрипт python фиксирует только исходящие пакеты.

Wireshark использует Libpcap/WinPcap, которая использует механизм ОС по захвату пакетов (Libpcap) или механизм, предоставленный водителем, который является частью WinPcap (WinPcap) для захвата пакетов.

Это не механизм, который вы используете. Учитывая, что ваш код находится в Python, вы можете посмотреть на использование Scapy.

+0

Я настоятельно рекомендую использовать scapy, однако он разработан как инструмент Linux. Он может быть установлен в Windows, но я обнаружил, что он более болезнен, чем benificial. –