Đọc lưu lượng mạng Python

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

Làm cách nào để giám sát lưu lượng mạng bằng Python?

nhập thời gian nhập psutil UPDATE_DELAY = 1 # tính bằng giây def get_size[byte]. """ Trả về kích thước của byte ở định dạng đẹp """ cho đơn vị trong ['', 'K', 'M', 'G', 'T', 'P']. nếu byte < 1024. trả lại f"{byte. 2f}{unit}B" byte /= 1024
# lấy số liệu thống kê I/O của mạng từ psutil io = psutil

Làm cách nào tôi có thể xem tất cả lưu lượng truy cập mạng?

Những điều cần biết .
Để xác định địa chỉ IP của bộ định tuyến, trong Windows, hãy mở Dấu nhắc Lệnh và chạy ipconfig. .
Sử dụng bộ định tuyến, mở trình duyệt và nhập địa chỉ IP của bộ định tuyến > Enter > định vị Danh sách thiết bị > Trạng thái hoặc Giám sát băng thông hoặc mạng

TShark trong Python là gì?

MÔ TẢ. TShark là công cụ phân tích giao thức mạng . Nó cho phép bạn chụp dữ liệu gói từ mạng trực tiếp hoặc đọc các gói từ tệp chụp đã lưu trước đó, in dạng đã giải mã của các gói đó sang đầu ra tiêu chuẩn hoặc ghi các gói vào một tệp.

Làm cách nào để biết liệu có kết nối mạng khả dụng và đang hoạt động trong Python không?

Hiển thị hoạt động trên bài đăng này. nhập urllib def đã kết nối [host='http. //Google. com']. cố gắng. urllib. urlopen[host] trả về True ngoại trừ. return Sai # in thử[ 'đã kết nối' nếu đã kết nối[] khác 'không có internet. ' ]

Chủ Đề