nhưng vấn đề là khi tôi thêm nó vào trong khi nếu ip đích không thể truy cập được thì nó cũng trả về 0 và 1 theo cách khác [sau một thời gian trễ]
nếu ip có thể truy cập được thì nó có trả về 0 liên tục không
Đây là liên kết tôi đã thử cả quy trình con. gọi cả hai API đều cho cùng một đầu ra
https. //diễn đàn. quy nạp tự động hóa. com/t/script-to-ping-computer/16612/6 Hàm Python để kiểm tra ping
Những gì tôi đã thử
import os from time import sleep def add[]: print["in add function"] def sub[]: print["in subtract function"] def ping[]: online = os.system["ping -n 1 192.168.0.9"] if[online == 0]: print["Avilabe with ",online] return True else: print["Ofline with ",online] return False while True: add[] sleep[0.5] if[ ping[]]: sub[] ''' do other things if ping is successful ''' sleep[0.5] any alternative API to get return value when system pinging
Giá trị trả về là từ lệnh ping và sẽ phụ thuộc vào bất kỳ phản hồi nào mà lệnh nhận được. Điều này không liên quan gì đến lập trình Python mà là một tính năng của lệnh ping Windows. Nếu bạn chạy phần sau trong cửa sổ lệnh để kiểm tra.
ping -n 1 192.168.0.9 echo %ERRORLEVEL%
Biến ERRORLEVEL đưa ra kết quả của lệnh trước đó.
Đó là các địa chỉ IP cục bộ, vì vậy chúng tôi không thể sao chép hệ thống chính xác của bạn - điều đó có nghĩa là chúng tôi không thể kiểm tra mã của bạn trong cùng trường hợp như bạn và điều đó có thể liên quan
Vì vậy, nó sẽ tùy thuộc vào bạn.
May mắn thay, bạn có sẵn một công cụ giúp bạn tìm hiểu chuyện gì đang xảy ra. trình gỡ lỗi. Cách bạn sử dụng nó tùy thuộc vào hệ thống biên dịch của bạn, nhưng Google nhanh chóng cho tên của IDE và "trình gỡ lỗi" sẽ cung cấp cho bạn thông tin bạn cần.
Đặt một điểm dừng trên dòng đầu tiên trong hàm và chạy mã của bạn thông qua trình gỡ lỗi. Sau đó, xem mã của bạn và dữ liệu của bạn và tìm ra điều gì sẽ xảy ra theo cách thủ công. Sau đó, từng bước một kiểm tra xem những gì bạn mong đợi sẽ xảy ra chính xác là những gì đã xảy ra. Khi không, đó là khi bạn gặp sự cố và bạn có thể theo dõi lại [hoặc chạy lại và xem xét kỹ hơn] để tìm hiểu lý do tại sao
Xin lỗi, nhưng chúng tôi không thể làm điều đó cho bạn - đã đến lúc bạn học một kỹ năng mới [và rất, rất hữu ích]. gỡ lỗi
Thêm giải pháp của bạn ở đây
B I U S small BIG code
Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
0 & link [^] encode untab case indent outdentXem trước 0
thành viên hiện có
hoặc tham gia với chúng tôi
Tải xuống, Bình chọn, Nhận xét, Xuất bản
Email của bạnEmail này đang được sử dụng. Bạn có cần mật khẩu của bạn?
Mật khẩu tùy chọnKhi trả lời câu hỏi, vui lòng.
- Đọc kỹ câu hỏi.
- Hiểu rằng tiếng Anh không phải là ngôn ngữ đầu tiên của mọi người, vì vậy hãy khoan dung với lỗi chính tả và ngữ pháp
- Nếu một câu hỏi được diễn đạt kém thì hãy yêu cầu làm rõ, bỏ qua nó hoặc chỉnh sửa câu hỏi và khắc phục sự cố. Xúc phạm không được chào đón
- Đừng bảo ai đó đọc hướng dẫn. Rất có thể họ có và không nhận được. Đưa ra câu trả lời hoặc chuyển sang câu hỏi tiếp theo
Nội dung này, cùng với bất kỳ tệp và mã nguồn liên quan nào, được cấp phép theo Giấy phép Mở Dự án Code [CPOL]
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
Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
1 để 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ờ Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
2 như bên dướifrom pythonping import ping ping['127.0.0.1', verbose=True]
Điều này sẽ mang lại kết quả sau
Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Bất kể chế độ dài dòng là gì, hàm
Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
1 sẽ luôn trả về một đối tượng Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
1. Đây là một đối tượng có thể lặp lại đặc biệt, chứa danh sách các mục Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
2. 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àoBạ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ó
3 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ốnReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
4 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êuReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
5 cho phép bạn sử dụng một tải trọng cụ thể [byte]Reply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
6 chỉ định cho phép bạn xác định số lượng gói ICMP sẽ gửiReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
7 thời gian chờ giữa các lần ping, tính bằng giâyReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
8 vàReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
9 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 trongReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
8 và tăng dần đến kích thước được xác định trongReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
9. 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 địnhReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
3, hai trường này sẽ bị bỏ quaReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
ping -n 1 192.168.0.9 echo %ERRORLEVEL%
63 là cờ, nếu được đặt thành True, sẽ bật cờ Không phân mảnh trong tiêu đề IP
2 bật chế độ dài dòng, in đầu ra thành luồng [xemReply from 127.0.0.1, 9 bytes in 0.17ms Reply from 127.0.0.1, 9 bytes in 0.14ms Reply from 127.0.0.1, 9 bytes in 0.12ms Reply from 127.0.0.1, 9 bytes in 0.12ms
ping -n 1 192.168.0.9 echo %ERRORLEVEL%
65]ping -n 1 192.168.0.9 echo %ERRORLEVEL%
65 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ấpping -n 1 192.168.0.9 echo %ERRORLEVEL%
65, đầu ra dài dòng sẽ được gửi tới luồngping -n 1 192.168.0.9 echo %ERRORLEVEL%
68. Bạn có thể muốn sử dụng một tập tin ở đâyping -n 1 192.168.0.9 echo %ERRORLEVEL%
69 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
Reply from 127.0.0.1, 9 bytes in 0.17ms
Reply from 127.0.0.1, 9 bytes in 0.14ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
Reply from 127.0.0.1, 9 bytes in 0.12ms
1. from pythonping import ping ping['127.0.0.1', verbose=True]21 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
from pythonping import ping ping['127.0.0.1', verbose=True]22.
from pythonping import ping ping['127.0.0.1', verbose=True]23 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
from pythonping import ping ping['127.0.0.1', verbose=True]24. 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
from pythonping import ping ping['127.0.0.1', verbose=True]25. 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
from pythonping import ping ping['127.0.0.1', verbose=True]26 và
from pythonping import ping ping['127.0.0.1', verbose=True]24
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
ping -n 1 192.168.0.9 echo %ERRORLEVEL%6
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