Ngôi sao
Nhúng
Bạn thích làm gì?
Tập lệnh Python nhỏ để kết xuất địa chỉ IP từ một tệp
Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều
#!/usr/bin/python3 | |
Nhập khẩu, Re sys, re | |
f = mở [sys.argv [1], 'r']] = open[sys.argv[1],'r'] | |
Text = f.Read [] = f.read[] | |
IPS = [] = [] | |
regex = re.findall [r '\ b [?: \ d {1,3} \.] {3} \ d {1,3} \ b', text] = re.findall[r'\b[?:\d{1,3}\.]{3}\d{1,3}\b',text] | |
ifregexisnotnone: regex is not None: | |
formatchinregex: match in regex: | |
ifmatchnotinips: match not in ips: | |
ips.append [khớp].append[match] | |
in [khớp][match] |
Lưu trữ dữ liệu văn bản trong một biến ..
Tìm kiếm văn bản cho một chuỗi con ..
Kết hợp các biểu thức thường xuyên ..
Để tất cả chúng cùng nhau..
import re
with open['traffic.txt', 'r'] as file:
fi = file.readlines[]
re_ip = re.compile["^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"]
re_port = re.compile["^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$\/[\d+]"]
for line in fi:
ip = re.findall[re_ip,line]
port = re.findall[re_port,line]
print port , ip
Làm cách nào để in địa chỉ IP công cộng bằng Python?Sep 8, 2017 at 5:09
5
Làm cách nào để tìm địa chỉ IP công khai của tôi trong Python ?.
import re
with open['traffic.txt', 'r'] as file:
fi = file.readlines[]
re_ip = re.compile["\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"]
re_port = re.compile["\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/[\d+]"]
for line in fi:
port = re.findall[re_port,line]
ip = re.findall[re_ip,line]
print "PORT is " , port , "ip is " ,ip
Nhập ổ cắm lưu trữ_name = ổ cắm. gethostname [] ip_address = ổ cắm ..Sep 8, 2017 at 5:42
Zoro99Zoro99Zoro99
Nhập ổ cắm ip_address = ổ cắm. gethostbyname ["google.com"] in [ip_address] #Output: 172.217 ..3 silver badges13 bronze badges
1
Tìm kiếm văn bản cho một chuỗi con ..
jemurray@mbp-2019:~/Documents/scripts/wustlPython $ cat ipsampleinput.txt
This is a text file with ip address: 192.168.1.1 within it, there are more addresses like this one 10.23.12.1
sprinkled throughout the 1.2.3.4 file. SomeRight10.3.3.2Next to each other some spaced apart.
Kết hợp các biểu thức thường xuyên ..
#!/usr/local/bin/python3
import fileinput
import re
for line in fileinput.input[]:
ip = re.findall[ r'[0-9]+[?:\.[0-9]+]{3}', line ]
if ip:
for i in ip:
print[i]
Output:
jemurray@mbp-2019:~/Documents/scripts/wustlPython $ cat ipsampleinput.txt | ./findAllIpAddresses.py
192.168.1.1
10.23.12.1
1.2.3.4
10.3.3.2
Tìm kiếm văn bản cho một chuỗi con ..
Kết hợp các biểu thức thường xuyên ..
Để tất cả chúng cùng nhau..
Làm cách nào để in địa chỉ IP công cộng bằng Python?
Làm cách nào để tìm địa chỉ IP công khai của tôi trong Python ?.
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:32 10.20.30.5_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:33 10.33.10.100_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:33 172.168.10.3_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:32 192.168.0.171_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:32 192.168.0.172_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:32
192.168.0.186_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 01:32 192.168.0.195_post.txt
-rw-rw-r–. 1 jdoe jdoe 0 Jul 13 02:08 987.33.10.100_post.txt
Bây giờ sử dụng các mô -đun Python RE và OS để trích xuất các địa chỉ IP từ mỗi tệp.
Tất cả chỉ cần một vài dòng.
>>> import re
>>> import os
>>> ip for file in os.listdir['.'] for ip in re.findall["\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", file
['192.168.0.171', '192.168.0.172', '192.168.0.186', '192.168.0.195', '10.20.30.5', '10.33.10.100', '172.168.10.3', '010.33.10.100', '987.33.10.100']
Như bạn có thể thấy với biểu thức chính quy lỏng lẻo, chúng tôi vẫn đang chụp hai địa chỉ IP cuối cùng. Chúng tôi chỉ muốn chụp địa chỉ IP IPv4 VAILD.u can see with the loose regular expression, we are still capturing the last two IP addresses. We only want to capture a vaild IPv4 IP addresses.
Nếu bạn khăng khăng sử dụng tệp.
.
[jdoe@centos8 Documents]$ cat extract_ip_from_filenames.py
import os
import re
ip_lst = [ip for file in os.listdir['.'] for ip in re.findall["\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}", file]]
print[ip_lst]
. .10.3 ',' 010.33.10.100 ',' 987.33.10.100]]
[‘192.168.0.171’, ‘192.168.0.172’, ‘192.168.0.186’, ‘192.168.0.195’, ‘10.20.30.5’, ‘10.33.10.100’, ‘172.168.10.3’, ‘010.33.10.100‘,
‘987.33.10.100′]
Để thắt chặt biểu thức. Bạn có thể sử dụng biểu thức này có thể được tìm thấy trong cuốn sách Oreily.
Bạn có thể sử dụng Regex đơn giản hoặc chính xác được đề xuất trong cuốn sách.
//www.oreilly.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
Giải thích về biểu thức chính quy.
\ b [?: [0-9] {1,3}.] {3} [0-9] {1,3} \ b[?:[0-9]{1,3}\.]{3}[0-9]{1,3}\B
\ b = không gian [tùy chọn]
\ B = không phải là không gian [tùy chọn]
?: = Nhóm không bắt giữ, điều này có nghĩa là bạn sẽ không bắt được nhóm hàng đầu
[0-9] {1,3} = khớp với bất kỳ số 0-999, nói cách khác, ba chuỗi số 0-9.
[jdoe@centos8 tài liệu] $ cat actact_ip_from_filenames.py
import os
import re
ip_lst = [ip for file in os.listdir['.'] for ip in re.findall[r"\b[?:[0-9]{1,3}\.]{3}[0-9]{1,3}\B", file]]
print[ip_lst]
. .10.3 ',' 010.33.10.100 ',' 987.33.10.100]]
[‘192.168.0.171’, ‘192.168.0.172’, ‘192.168.0.186’, ‘192.168.0.195’, ‘10.20.30.5’, ‘10.33.10.100’, ‘172.168.10.3’, ‘010.33.10.100‘, ‘987.33.10.100′]
Vâng, điều đó đã không khắc phục các vấn đề của chúng tôi. Có vẻ như chúng ta phải làm thêm một chút công việc.
Phiên bản cuối cùng và cải tiến.
Tôi muốn cải thiện biểu thức đơn giản để thắt chặt biểu thức.
Thay đổi biểu thức như sau.
Giải thích về biểu thức chính quy.
\ b [?: [0-9] {1,3}.] {3} [0-9] {1,3} \ b[?:[1-2]?[0-9]{1,2}\.]{3}[1-2]?[0-9]{1,2}\B
\ b = không gian [tùy chọn]
\ B = không phải là không gian [tùy chọn]
?: = Nhóm không bắt giữ, điều này có nghĩa là bạn sẽ không bắt được nhóm hàng đầu
[0-9] {1,3} = khớp với bất kỳ số 0-999, nói cách khác, ba chuỗi số 0-9.
[jdoe@centos8 tài liệu] $ cat actact_ip_from_filenames.py
[jdoe@centos8 tài liệu] $ cat actact_ip_from_filenames.py
import os
import re
ip_lst = [ip for file in os.listdir['.'] for ip in re.findall[r"\b[?:[1-2]?[0-9]{1,2}\.]{3}[1-2]?[0-9]{1,2}\B", file]]
print[ip_lst]
. .10.3 ',' 010.33.10.100 ',' 987.33.10.100]]
[‘192.168.0.171’, ‘192.168.0.172’, ‘192.168.0.186’, ‘192.168.0.195’, ‘10.20.30.5’, ‘10.33.10.100’, ‘172.168.10.3’]
Vâng, điều đó đã không khắc phục các vấn đề của chúng tôi. Có vẻ như chúng ta phải làm thêm một chút công việc.
Phiên bản cuối cùng và cải tiến.