Tôi có một tệp nhật ký như sau:
12-02-2022 15:18:22 +0330 SOCK5.6699 00000 user144 97.251.107.125:38605 1.1.1.1:443 51766 169369 0 CONNECT 1.1.1.1:443
12-02-2022 15:18:27 +0330 SOCK5.6699 00094 user156 32.99.193.2:51242 1.1.1.1:443 715 388 0 CONNECT 1.1.1.1:443
12-02-2022 15:18:56 +0330 SOCK5.6699 00000 user105 191.184.66.98:40048 1.1.1.1:443 18105 29029 0 CONNECT 1.1.1.1:443
12-02-2022 15:18:56 +0330 SOCK5.6699 00000 user105 191.184.66.98:40070 1.1.1.1:443 674 26805 0 CONNECT 1.1.1.1:443
12-02-2022 15:20:24 +0330 SOCK5.6699 00000 user143 112.199.63.119:60682 1.1.1.1:443 475 445 0 CONNECT 1.1.1.1:443
12-02-2022 15:20:37 +0330 SOCK5.6699 00000 user105 191.184.66.98:40102 1.1.1.1:443 12913 18780 0 CONNECT 1.1.1.1:443
12-02-2022 15:20:42 +0330 SOCK5.6699 00000 user143 112.199.63.119:60688 1.1.1.1:443 4530 34717 0 CONNECT 1.1.1.1:443
12-02-2022 15:20:44 +0330 SOCK5.6699 00000 user127 212.167.145.49:2972 1.1.1.1:443 827 267 0 CONNECT 1.1.1.1:443
mục tiêu của tôi là trích xuất hai phần của tệp nhật ký này:
- tên tài khoản
- Địa chỉ IP của nguồn người dùng
dưới đây là một mẫu của các phần dữ liệu cần thiết.
12-02-2022 15:18:22 +0330 SOCK5.6699 00000 người dùng144 97.251.107.125:38605 1.1.1.1:443 51766 169369 0 KẾT NỐI 1.1.1.1:443
Vì vậy, tôi đã viết một tập lệnh Python để trích xuất cả hai mục và lưu trữ chúng trong các danh sách riêng biệt, sau đó nối chúng với chức năng zip.
nhập pprint
bộ sưu tập nhập khẩu
iplist=[]
cho l trong dữ liệu:
ip_port=l[53:71]
iplist.append(ip_port.split(':')[0])
danh sách người dùng = []
cho bạn trong dữ liệu:
người dùng=u[42:52]
userlist.append(user.replace(" ", ""))
a=list(zip(iplist,userlist))
most_ip=collections.Counter(a).most_common(5)
pprint.pprint(most_ip)
Mã này hoạt động tốt và tôi có thể lấy ip được sử dụng nhiều nhất với tên người dùng tương ứng.
Cũng cần đề cập rằng tôi đã không sử dụng lại mô-đun, vì nó đang liệt kê IP thứ hai (IP đích là 1.1.1.1- mà tôi không quan tâm đến nó)
Câu hỏi:
Có cách nào khác (gọn gàng hơn) so với cách tôi đã viết mã không?