2017-06-20 3 views
0

私は、反復でパケットからデータを収集するプログラムを書いています。数日前まではうまくいきました。 EDIT:SOLVED。 IPを定数として保存し、IPを上書きしました。私のscapy snifferは動作しませんか?

from scapy.all import * 
import requests 
import socket 



ROUND = 2 
IP = 'localhost' 
PORT = 80 
SERVER_ADDRESS = (IP,PORT) 








def get_packet_size(packet): 
    return len(packet) 


def find_port(packet,ip): 

    if packet[IP].dst == ip: 
     if TCP in packet: 
      return packet[TCP].sport 
     else: 
      return packet[UDP].sport 
    else: 
     if UDP in packet: 
      return packet[TCP].dport 
     else: 
      return packet[UDP].dport 
def check_traffic(packet , ip): 

    if packet[IP].dst == ip: 
     return False 
    else: 
     return True 
def find_country(packet, ip): 
    request = "http://freegeoip.net/json/"+ip 
    response = requests.get(request) 
    real_response = response.text 

    real_response = real_response.split(",") 
    country_full = real_response[2] 
    country_full = country_full.split(":") 
    country = country_full[1] 
    country = country[1:len(country) - 1] 
    print(country) 

    return str(country) 


def find_ip(packet): 
    name = socket.gethostname() 
    ip_of_agent = socket.gethostbyname(name) 

    if(packet[IP].dst != ip_of_agent): 
     return packet[IP].dst 
    else: 
     return packet[IP].src 

def work_on_packets(packets): 
    packet_dic = {} 
    #ip_dic = [] 
    i = 0 # num of packet in iteration. 
    for packet in packets: 

     print("\n") 
     packet_ip = find_ip(packet) 
     print(packet_ip) 

     country = find_country(packet,packet_ip) 
     print(country) 

     is_coming_traffic = check_traffic(packet,packet_ip) # True if coming , False if outer traffic. 

     port = find_port(packet,packet_ip) 
     print(port) 

     packet_size = get_packet_size(packet) 
     print(packet_size) 

     packet_dic["Packet "+str(i)] = [packet_ip,country,is_coming_traffic,port,packet_size] 
     i = i + 1 

    #send_data(packet_dic) 





def is_IP(packet): 
    return ((UDP in packet or TCP in packet) and IP in packet) 

def main(): 
    print("Starting sniff..") 
    while(True): 
     packets = sniff(lfilter = is_IP) 
     work_on_packets(packets) 



main() 

しかし、今はちょうど動作しません。出力は常にこのようなものですが、これ以上のものはありません。

WARNING: No route found for IPv6 destination :: (no default route?). This affects only IPv6 
Starting sniff.. 

何が問題なのでしょうか?どんな助けも素晴らしいです!

答えて

0

IPV6のデフォルトルートはありません.IPV6を持たないシステムではまったく正常です。これは、IPV4パケットのプログラムには影響しないはずです。ここで

は、あなたがそれ

import logging 
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) 
+0

ありませんを無効にする方法ですが、それは問題ではありませんでした。 IPの代わりに「ローカルホスト」をconstとして保存していたので、上書きしました。 – MichaelFel123

関連する問題