0

URLのリストでpingを使用して簡単なrtt比較を実行しています。IPを抽出して、whoisを実行し、地理的な場所を取得できるようにします。特にgoogle.comとfacebook.comで始まるURLのリストでこれを実行すると、pingからの両方の出力が同じ形式であっても、ipはgoogleの正規表現と一致しますがfacebookとは一致しません。以下のコードは、何が起こっているのかをよりよく理解するためのものです。

urls = ["google.com", "facebook.com"]
ip_regex = re.compile('[1-9]+\\.[1-9]+\\.[1-9]+\\.[1-9]+')
time_regex = re.compile(' [\.1-9]+/.*/.*/.* ms') 

for url in urls:
    output = ""
    print url

    ping = subprocess.Popen(["ping", "-c", "3", url], stdout=subprocess.PIPE)

    while ping.poll() == None:
        output += ping.stdout.read()

    output += ping.stdout.read()

    #DEBUG
    print "OUTPUT"
    print output

    ip = ip_regex.findall(output)
    print ip

    ip = ip[0]

    times = time_regex.findall(output)

    print times

    os.system('whois ' + ip + ' | egrep "Country|StateProv|City"')

ip_regexは他の誰かのためにFacebook(#2)で失敗しますか?なんで?

4

2 に答える 2

8

FacebookのIPにはゼロがあります。1-9ゼロは含まれません。

 

その間、正規表現に生の文字列を使用します。

r'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'

\d数字を照合するためにクラスを使用します。

r'\d+\.\d+\.\d+\.\d+'

他の正規表現を修正することを忘れないでください:

r' [\.0-9]+/.*/.*/.* ms'
于 2013-02-19T00:56:07.983 に答える
2

IPアドレスを見つけるための正規表現はb0rkedです。これがより良いものです:

ip_pattern = r'(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}'
于 2013-02-19T01:01:29.003 に答える