Trong các bài đăng trước, chúng tôi đã sử dụng Scapy, Plotly, Pandas, v.v. để phân tích và trực quan hóa dữ liệu mạng. Tất cả những ví dụ đó đã sử dụng dữ liệu từ các tệp chụp gói [PCAP]
Trong bài đăng này, chúng tôi sẽ giới thiệu cách quan sát [đánh hơi] các gói trong thời gian thực và vẽ sơ đồ chúng bằng Matplotlib
Yêu cầu
Điều này đã được thử nghiệm trên OSX, nhưng sẽ hoạt động trên mọi máy Linux. Bạn sẽ cần cài đặt Scapy và Matplotlib
#> pip3 cài đặt matplotlib scapy
nhập khẩu
Để chạy trong thời gian thực, bạn sẽ nhập Scapy và Matplotlib. Chúng tôi sẽ nhập argparse để lấy giao diện dưới dạng tùy chọn dòng lệnh và os để kiểm tra xem liệu chúng tôi có phải là root hay không và có thể rình mò trên giao diện đã chỉ định hay không
từ scapy. tất cả nhập khẩu *
nhập matplotlib. pyplot dưới dạng plt
nhập argparse
từ os nhập getuid
Tranh luận
Người dùng sẽ cung cấp giao diện và chúng tôi sẽ cho phép một tùy chọn khác chỉ chụp các gói X trước khi thoát
trình phân tích cú pháp = argparse. ArgumentParser[description='Live Traffic Examiner']
trình phân tích cú pháp. add_argument['giao diện', help="Giao diện mạng", type=str]
trình phân tích cú pháp. add_argument['--count', help="Chụp các gói X và thoát", gõ=int]
args=trình phân tích cú pháp. parse_args[]
Kiểm tra người dùng
Như đã đề cập ở trên, chúng tôi muốn xem liệu người dùng có thể truy cập vào giao diện. Thông thường, chỉ root mới có thể làm điều đó, nhưng chúng tôi sẽ cho phép kiểm tra xem nó có hoạt động không
#Kiểm tra xem chúng tôi đã root chưa, nếu không Scapy có thể không nghe được
nếu getuid[]. = 0
print["Cảnh báo. Không chạy bằng root, nghe gói có thể không hoạt động. "]
cố gắng
print["--Đang cố gắng nghe trên {}". định dạng [đối số. giao diện]]
đánh hơi [iface = args. giao diện, đếm = 1]
print["--Thành công. "]
ngoại trừ
print["--Thất bại. \nLỗi. Không thể đánh hơi các gói, hãy thử sử dụng Sudo. "]
từ bỏ[]
Xây dựng cốt truyện
Để bắt đầu xây dựng cốt truyện, chúng ta sẽ thêm tiêu đề và nhãn cho cốt truyện. Chúng tôi cũng sẽ sử dụng ion[], cho phép biểu đồ tương tác
#Chế độ tương tác
plt. ion[]
#Nhãn
plt. ylabel["Byte"]
plt. xlabel["Số đếm"]
plt. title["Lưu lượng mạng thời gian thực"]
plt. chặt chẽ_layout[]
Vòng
Tập lệnh sẽ có một vòng lặp lắng nghe một gói tại một thời điểm. Ở đây, chúng tôi sẽ thiết lập một danh sách trống để chứa số lượng và dữ liệu byte
#Empty list để giữ byte
yData=[]
tôi=0
#Nghe vô thời hạn hoặc cho đến khi chúng tôi đếm được
trong khi đúng
#Nghe 1 gói
cho pkt trong tiếng hít [iface=args. giao diện, đếm = 1]
Điều quan trọng trong đoạn mã trên là đếm=1 vì nó yêu cầu Scapy đánh hơi một gói tin. Bây giờ chúng ta có một gói duy nhất, mã sẽ nhập vòng lặp thử/ngoại trừ/. Lý do thử/ngoại trừ là để cho phép người dùng nhấn CTRL-C để thoát, nếu không chương trình sẽ không thoát dễ dàng
cố gắng
nếu IP trong pkt
yData. nối thêm [gói [IP]. len]
plt. cốt truyện[yData]
#Tạm dừng và vẽ
plt. tạm dừng [0. 1]
tôi+=1
nếu tranh luận. đếm
nếu tôi >= args. đếm
từ bỏ[]
Đoạn mã trên thêm kích thước của gói vào một mảng, thêm nó vào biểu đồ và vẽ nó bằng plt. tạm ngừng
ngoại trừ Bàn phím Ngắt
print["Đã bắt gói tin {} trên giao diện {} ". định dạng [i, args. giao diện]]
từ bỏ[]
Cuối cùng, chúng tôi sẽ sử dụng ngoại trừ CTRL-C để thoát và gửi số lượng gói
Cách sử dụng
#>. /thời gian thực. py -h
cách sử dụng. thời gian thực. giao diện py [-h] [--count COUNT]
Giám khảo giao thông trực tiếp
đối số vị trí
giao diện Giao diện mạng để nghe trên i. e. vi0
đối số tùy chọn
-h, --help hiển thị thông báo trợ giúp này rồi thoát
--count COUNT Ghi gói X và thoát
#> sudo. /thời gian thực. py en0 --count 200
Mật khẩu
Chụp 200 gói trên giao diện en0
Để bạn tham khảo, đây là mã đầy đủ
từ scapy. tất cả nhập khẩu *
nhập matplotlib. pyplot dưới dạng plt
nhập argparse
từ os nhập getuid
trình phân tích cú pháp = argparse. ArgumentParser[description='Live Traffic Examiner']
trình phân tích cú pháp. add_argument['giao diện', help="Giao diện mạng để nghe trên tôi. e. en0", gõ=str]
trình phân tích cú pháp. add_argument['--count', help="Chụp các gói X và thoát", gõ=int]
args=trình phân tích cú pháp. parse_args[]
#Kiểm tra xem chúng tôi đã root chưa, nếu không Scapy có thể không nghe được
nếu getuid[]. = 0
print["Cảnh báo. Không chạy bằng root, nghe gói có thể không hoạt động. "]
cố gắng
print["--Đang cố gắng nghe trên {}". định dạng [đối số. giao diện]]
đánh hơi [iface = args. giao diện, đếm = 1]
print["--Thành công. "]
ngoại trừ
print["--Thất bại. \nLỗi. Không thể đánh hơi các gói, hãy thử lại bằng sudo. "]
từ bỏ[]
nếu tranh luận. đếm
print["Đang bắt gói tin {} trên giao diện {}". định dạng [đối số. đếm, lập luận. giao diện]]
khác
print["Chụp gói không giới hạn trên giao diện {} \n--Nhấn CTRL-C để thoát
". định dạng [đối số. giao diện]]
#Chế độ tương tác
plt. ion[]
#Nhãn
plt. ylabel["Byte"]
plt. xlabel["Số đếm"]
plt. title["Lưu lượng mạng thời gian thực"]
plt. chặt chẽ_layout[]
#Empty list để giữ byte
yData=[]
tôi=0
#Nghe vô thời hạn hoặc cho đến khi chúng tôi đếm được
trong khi đúng
#Nghe 1 gói
cho pkt trong tiếng hít [iface=args. giao diện, đếm = 1]
cố gắng
nếu IP trong pkt
yData. nối thêm [gói [IP]. len]
plt. cốt truyện[yData]
#Tạm dừng và vẽ
plt. tạm dừng [0. 1]
tôi+=1
nếu tranh luận. đếm
nếu tôi >= args. đếm
từ bỏ[]
ngoại trừ Bàn phím Ngắt
print["Đã bắt gói tin {} trên giao diện {} ". định dạng [i, args. giao diện]]
từ bỏ[]
Trực quan hóa dữ liệu mạng trong thời gian thực với Python takeaway
Tôi hy vọng loạt bài về phân tích lưu lượng mạng với Python đã giúp ích cho bạn. Bạn có thể lấy hầu hết mã trong các ví dụ và tùy chỉnh nó theo nhu cầu cụ thể của mình. Tôi có cảm giác rằng một khi bạn thành thạo điều này, bạn sẽ ngày càng ít sử dụng Wireshark hơn
Automox cho hoạt động CNTT dễ dàng
Automox là nền tảng hoạt động CNTT dựa trên đám mây dành cho các tổ chức hiện đại. Nó giúp dễ dàng giữ cho mọi điểm cuối được tự động định cấu hình, vá lỗi và bảo mật – ở mọi nơi trên thế giới. Chỉ cần nhấn một nút, quản trị viên CNTT có thể khắc phục các lỗ hổng nghiêm trọng nhanh hơn, giảm chi phí và độ phức tạp, đồng thời giành lại hàng giờ trong ngày của họ.
Nhận bản dùng thử Automox miễn phí của bạn và tham gia cùng hàng nghìn công ty đang chuyển đổi hoạt động CNTT thành động lực kinh doanh chiến lược