簡體   English   中英

如何根據IP地址整理列表?

[英]How can I get the list sorted out according to the IP address?

#!/usr/bin/python
# -*- encoding:utf8 -*-

import sys
import fileinput
import socket

hostlist= ['www.yahoo.com','www.google.com', 'www.facebook.com', 'www.cnn.com', 'www.thetimes.com']

for line in hostlist:
    for hostnames in line.split():
        try:
            socket.gethostbyname(hostnames)
        except Exception as invalid_hostnames:
            print ('Invalid hostname address = ') + hostnames
        else:
            ip = socket.gethostbyname(hostnames)
            print (ip.ljust(30,' ')) + '' + (hostnames.ljust(30,' '))

輸出如下

46.228.47.115                 www.yahoo.com                 
123.176.0.162                 www.google.com                
179.60.192.36                 www.facebook.com              
185.31.17.73                  www.cnn.com                   
54.229.184.19                 www.thetimes.com

是否可以根據解析的 IP 地址對輸出進行排序?

例如,您應該首先以(hostname, ip)形式生成條目列表。 生成該列表后,使用sorted()對其進行迭代並打印出內容。

例如,不要打印,創建一個列表:

 result = []

並將您的條目附加到該列表中,而不是打印出來:

result.append((hostname, ip))

然后,在處理完所有項目后,將它們排序打印出來:

for hostname, ip in sorted(result, key=lambda v: v[1]):
    print (ip.ljust(30,' ')) + '' + (hostnames.ljust(30,' '))

嘗試:

import socket

results = []

with open('hostnames_list.txt') as f:
    for hostname in f:
        try:
            ip = socket.gethostbyname(hostname.strip())
        except socket.gaierror:
            ip = socket.gethostbyname('.'.join(hostname.strip().split('.')[1:]))
        results.append((ip, hostname.strip()))

for (ip, hostname) in sorted(results, key=lambda item: socket.inet_aton(item[0])):
    print (ip.ljust(30,' ')) + '' + (hostname.ljust(30,' '))

注意:注意,我正在使用socket.inet_aton將 IPv4 地址從點分四線格式(例如,'123.45.67.89')轉換為 32 位壓縮二進制格式,作為長度為四個字符的字符串。 這樣,您就可以正確地對它們進行排序。

例如

data = [
        ('31.13.73.36', 'google.com'),
        ('31.13.72.35', 'foo.bar'),
        ('31.13.72.36', 'somedomain.com')
]
print sorted(data, key=lambda item: socket.inet_aton(item[0]))

將輸出:

[
    ('31.13.72.35', 'foo.bar'),
    ('31.13.72.36', 'somedomain.com'),
    ('31.13.73.36', 'google.com')
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM