Python ping xuất ra tập tin

Nhà

jc - Trình phân tích cú pháp đầu ra lệnh JSON Convert

$ ping -c 3 1.2.3.4 | jc --ping
9

Hỗ trợ đầu ra

$ ping -c 3 1.2.3.4 | jc --ping
9 và
$ jc ping -c 3 1.2.3.4
0

Cách sử dụng [cli]

Ghi chú. Sử dụng tùy chọn ping

$ jc ping -c 3 1.2.3.4
1 [đếm], nếu không dữ liệu sẽ không được dẫn đến
$ jc ping -c 3 1.2.3.4
2

$ ping -c 3 1.2.3.4 | jc --ping

hoặc

$ jc ping -c 3 1.2.3.4

Cách sử dụng [mô-đun]

import jc
result = jc.parse['ping', ping_command_output]

Lược đồ

{
  "source_ip":                   string,
  "destination_ip":              string,
  "data_bytes":                  integer,
  "pattern":                     string,        # null if not set
  "destination":                 string,
  "packets_transmitted":         integer,
  "packets_received":            integer,
  "packet_loss_percent":         float,
  "duplicates":                  integer,
  "round_trip_ms_min":           float,
  "round_trip_ms_avg":           float,
  "round_trip_ms_max":           float,
  "round_trip_ms_stddev":        float,
  "responses": [
    {
      "type":                    string,        # [0]
      "unparsed_line":           string,        # [1]
      "timestamp":               float,
      "bytes":                   integer,
      "response_ip":             string,
      "icmp_seq":                integer,
      "ttl":                     integer,
      "time_ms":                 float,
      "duplicate":               boolean,
      "vr":                      integer,       # [2]
      "hl":                      integer,       # [2]
      "tos":                     integer,       # [2]
      "len":                     integer,       # [2]
      "id":                      integer,       # [2]
      "flg":                     integer,       # [2]
      "off":                     integer,       # [2]
      "pro":                     integer,       # [2]
      "cks":                     ingeger,       # [2]
      "src":                     string,
      "dst":                     string
    }
  ]
}

[0] 'reply', 'timeout', 'unparsable_line', etc. See
    `_error_type.type_map` for all options
[1] only if an 'unparsable_line' type
[2] hex value converted to decimal

ví dụ

$ ping -c 3 -p ff cnn.com | jc --ping -p
{
  "destination_ip": "151.101.1.67",
  "data_bytes": 56,
  "pattern": "0xff",
  "destination": "cnn.com",
  "packets_transmitted": 3,
  "packets_received": 3,
  "packet_loss_percent": 0.0,
  "duplicates": 0,
  "round_trip_ms_min": 28.015,
  "round_trip_ms_avg": 32.848,
  "round_trip_ms_max": 39.376,
  "round_trip_ms_stddev": 4.79,
  "responses": [
    {
      "type": "reply",
      "bytes": 64,
      "response_ip": "151.101.1.67",
      "icmp_seq": 0,
      "ttl": 59,
      "time_ms": 28.015,
      "duplicate": false
    },
    {
      "type": "reply",
      "bytes": 64,
      "response_ip": "151.101.1.67",
      "icmp_seq": 1,
      "ttl": 59,
      "time_ms": 39.376,
      "duplicate": false
    },
    {
      "type": "reply",
      "bytes": 64,
      "response_ip": "151.101.1.67",
      "icmp_seq": 2,
      "ttl": 59,
      "time_ms": 31.153,
      "duplicate": false
    }
  ]
}

$ ping -c 3 -p ff cnn.com | jc --ping -p -r
{
  "destination_ip": "151.101.129.67",
  "data_bytes": "56",
  "pattern": "0xff",
  "destination": "cnn.com",
  "packets_transmitted": "3",
  "packets_received": "3",
  "packet_loss_percent": "0.0",
  "duplicates": "0",
  "round_trip_ms_min": "25.078",
  "round_trip_ms_avg": "29.543",
  "round_trip_ms_max": "32.553",
  "round_trip_ms_stddev": "3.221",
  "responses": [
    {
      "type": "reply",
      "bytes": "64",
      "response_ip": "151.101.129.67",
      "icmp_seq": "0",
      "ttl": "59",
      "time_ms": "25.078",
      "duplicate": false
    },
    {
      "type": "reply",
      "bytes": "64",
      "response_ip": "151.101.129.67",
      "icmp_seq": "1",
      "ttl": "59",
      "time_ms": "30.999",
      "duplicate": false
    },
    {
      "type": "reply",
      "bytes": "64",
      "response_ip": "151.101.129.67",
      "icmp_seq": "2",
      "ttl": "59",
      "time_ms": "32.553",
      "duplicate": false
    }
  ]
}

phân tích cú pháp

________số 8

Chức năng phân tích văn bản chính

Thông số

data:        [string]  text data to parse
raw:         [boolean] unprocessed output if True
quiet:       [boolean] suppress warning messages if True

trả lại

$ jc ping -c 3 1.2.3.4
0

Thông tin trình phân tích cú pháp

khả năng tương thích. linux, darwin, freebsd

Phiên bản 1. 8 của Kelly Brazil [kellyjonbrazil@gmail. com]

PythonPing là cách đơn giản để ping trong Python. Với nó, bạn có thể gửi Đầu dò ICMP đến các thiết bị từ xa giống như cách bạn làm từ thiết bị đầu cuối. PythonPing là mô-đun, do đó bạn có thể chạy nó trong một tập lệnh dưới dạng một chức năng độc lập hoặc tích hợp các thành phần của nó trong một ứng dụng chính thức

Sử dụng cơ bản

Cách sử dụng PythonPing đơn giản nhất là trong một tập lệnh. Bạn có thể sử dụng chức năng

$ ping -c 3 1.2.3.4 | jc --ping
9 để ping mục tiêu. Nếu bạn muốn xem đầu ra ngay lập tức, mô phỏng những gì xảy ra trên thiết bị đầu cuối, hãy sử dụng cờ
$ jc ping -c 3 1.2.3.4
2 như bên dưới

$ jc ping -c 3 1.2.3.4
1

Điều này sẽ mang lại kết quả sau

$ jc ping -c 3 1.2.3.4
2

Bất kể chế độ dài dòng, hàm

$ ping -c 3 1.2.3.4 | jc --ping
9 sẽ luôn trả về một đối tượng
$ jc ping -c 3 1.2.3.4
21. Đây là một đối tượng có thể lặp lại đặc biệt, chứa danh sách 122 mục. Trong mỗi phản hồi, bạn có thể tìm thấy gói đã nhận và một số thông tin meta, chẳng hạn như thời gian nhận được phản hồi và bất kỳ thông báo lỗi nào

Bạn cũng có thể điều chỉnh ping của mình bằng cách sử dụng một số thông số bổ sung của nó

  • $ jc ping -c 3 1.2.3.4
    
    23 là một số nguyên cho phép bạn chỉ định kích thước của tải trọng ICMP mà bạn mong muốn
  • $ jc ping -c 3 1.2.3.4
    
    24 là số giây bạn muốn đợi phản hồi, trước khi cho rằng không thể truy cập mục tiêu
  • $ jc ping -c 3 1.2.3.4
    
    25 cho phép bạn sử dụng một tải trọng cụ thể [byte]
  • $ jc ping -c 3 1.2.3.4
    
    26 chỉ định cho phép bạn xác định số lượng gói ICMP sẽ gửi
  • $ jc ping -c 3 1.2.3.4
    
    27 thời gian chờ giữa các lần ping, tính bằng giây
  • $ jc ping -c 3 1.2.3.4
    
    28 và
    $ jc ping -c 3 1.2.3.4
    
    29 cho phép bạn thực hiện quét ping, bắt đầu từ kích thước tải trọng được xác định trong
    $ jc ping -c 3 1.2.3.4
    
    28 và tăng dần đến kích thước được xác định trong
    $ jc ping -c 3 1.2.3.4
    
    29. Tại đây, chúng tôi lặp lại tải trọng mà bạn đã cung cấp để phù hợp với kích thước mong muốn hoặc chúng tôi tạo ngẫu nhiên nếu không có tải trọng nào được cung cấp. Lưu ý rằng nếu bạn đã xác định
    $ jc ping -c 3 1.2.3.4
    
    23, hai trường này sẽ bị bỏ qua
  • $ jc ping -c 3 1.2.3.4
    
    53 là cờ, nếu được đặt thành True, sẽ bật cờ Không phân mảnh trong tiêu đề IP
  • $ jc ping -c 3 1.2.3.4
    
    2 bật chế độ dài dòng, in đầu ra thành luồng [xem
    $ jc ping -c 3 1.2.3.4
    
    55]
  • $ jc ping -c 3 1.2.3.4
    
    55 là luồng mục tiêu của chế độ dài dòng. Nếu bạn bật chế độ dài dòng và không cung cấp
    $ jc ping -c 3 1.2.3.4
    
    55, đầu ra dài dòng sẽ được gửi tới luồng
    $ jc ping -c 3 1.2.3.4
    
    58. Bạn có thể muốn sử dụng một tập tin ở đây
  • $ jc ping -c 3 1.2.3.4
    
    59 là cờ, nếu được đặt thành True, sẽ cho phép khớp tải trọng giữa yêu cầu ping và phản hồi [hành vi mặc định tuân theo hành vi của Windows, chỉ tính một phản hồi thành công bằng mã định danh gói phù hợp; hành vi của Linux tính tải trọng không tương đương với một kết quả phù hợp . 8. 8. 8 với 1000 byte và câu trả lời bị cắt bớt chỉ còn 74 đầu tiên của tải trọng yêu cầu với số nhận dạng gói phù hợp]

Câu hỏi thường gặp

Tôi có cần chế độ đặc quyền hoặc quyền root không?

Có, bạn cần phải root để sử dụng pythonping

Tại sao tôi cần phải root để sử dụng pythonping?

Tất cả các hệ điều hành đều cho phép các chương trình tạo ổ cắm TCP hoặc UDP mà không yêu cầu các quyền cụ thể. Tuy nhiên, ping chạy trong ICMP [không phải TCP hoặc UDP]. Điều này có nghĩa là chúng ta phải tạo các gói IP thô và đánh hơi lưu lượng trên card mạng. Hệ điều hành được thiết kế để yêu cầu root cho các hoạt động đó. Điều này là do việc có quyền truy cập không hạn chế vào NIC có thể khiến người dùng gặp rủi ro nếu ứng dụng đang chạy có mục đích xấu. Tất nhiên, đây không phải là trường hợp của pythonping, nhưng dù sao chúng ta cũng cần khả năng này để tạo các gói IP tùy chỉnh. Thật không may, đơn giản là không có cách nào khác để tạo các gói ICMP

Sử dụng nâng cao

Nếu bạn muốn mở rộng PythonPing hoặc tích hợp nó trong ứng dụng của mình, chúng tôi khuyên bạn nên sử dụng các lớp là một phần của Python Ping thay vì hàm

$ ping -c 3 1.2.3.4 | jc --ping
9.
$ ping -c 3 1.2.3.4 | jc --ping
11 xử lý giao tiếp với thiết bị đích, nó đảm nhiệm việc gửi yêu cầu ICMP và xử lý phản hồi [lưu ý rằng để đảm bảo an toàn cho luồng, bạn phải xử lý việc tạo ID hạt giống duy nhất cho từng phiên bản luồng, xem ping. _init_ để biết ví dụ về điều này]. Cuối cùng nó tạo ra đối tượng
$ ping -c 3 1.2.3.4 | jc --ping
12.
$ ping -c 3 1.2.3.4 | jc --ping
13 cần biết mục tiêu và tải trọng nào sẽ gửi đến thiết bị từ xa. Vì thế, chúng tôi có một số lớp trong mô-đun
$ ping -c 3 1.2.3.4 | jc --ping
14. Bạn có thể muốn tạo nhà cung cấp của riêng mình bằng cách mở rộng
$ ping -c 3 1.2.3.4 | jc --ping
15. Nếu bạn quan tâm đến điều đó, bạn nên kiểm tra tài liệu của cả mô-đun
$ ping -c 3 1.2.3.4 | jc --ping
16 và
$ ping -c 3 1.2.3.4 | jc --ping
14

Cấu trúc mã

Bố cục thư mục cấp cao nhất

Cấu trúc thư mục dự án của chúng tôi chứa tất cả các tệp src trong thư mục pythonping, các trường hợp thử nghiệm trong một thư mục khác và tài liệu trợ giúp trong thư mục cấp cao nhất

$ jc ping -c 3 1.2.3.4
5

Sơ đồ UML của cấu trúc mã bên dưới

Theo sơ đồ uml ở trên, năm lớp riêng biệt bên ngoài init tồn tại trong gói này. Executor, Icmp, Payload Provider và Utils. Mỗi người trong số họ dựa trên các thuộc tính đã được liệt kê dưới dạng các lớp con vì lợi ích của sự ngắn gọn. Tổng quan về từng lớp như sau

công dụng

Đơn giản chỉ cần tạo văn bản ngẫu nhiên. Xem chức năng Random_text

Mạng

Mở một ổ cắm để gửi và nhận dữ liệu. Xem các chức năng gửi, recv và del

Nhà cung cấp tải trọng

Tạo Tải trọng ICMP không có Tiêu đề. Đó là chức năng một giao diện. Nó có ba chức năng init, iter và next, tất cả đều được triển khai bởi các lớp con List, Repeat và Sweep lưu trữ các tải trọng trong các danh sách khác nhau

ICMP

Tạo ICMP heaser thông qua lớp con ICMPType và các chức năng trợ giúp khác nhau

người thi hành

Có nhiều lớp con khác nhau bao gồm Tin nhắn, Phản hồi, Thành công và Giao tiếp được sử dụng để gửi các gói icmp và thu thập dữ liệu

Trong đó

Sử dụng mạng, trình thực thi, payload_provider và utils. Random_text để xây dựng và gửi các gói ICMP để ping mạng

bài kiểm tra

Một gói kiểm tra tồn tại trong thư mục kiểm tra và chứa một loạt các bài kiểm tra đơn vị. Trước khi thực hiện các thay đổi, hãy đảm bảo chạy thử nghiệm và đảm bảo rằng tất cả các trường hợp tương ứng đều vượt qua. Đối với chức năng mới, các trường hợp thử nghiệm mới phải được thêm vào và ghi lại

Bạn có thể ping bằng Python không?

PythonPing là cách đơn giản để ping trong Python . Với nó, bạn có thể gửi Đầu dò ICMP đến các thiết bị từ xa giống như cách bạn làm từ thiết bị đầu cuối. PythonPing là mô-đun, do đó bạn có thể chạy nó trong một tập lệnh dưới dạng một chức năng độc lập hoặc tích hợp các thành phần của nó trong một ứng dụng chính thức.

Ping có nghĩa là gì trong Python?

Ping phổ biến nhất đề cập đến hành động gửi gói hoặc tín hiệu đến thiết bị khác và lắng nghe phản hồi .

Chủ Đề