2012-01-22 29 views
9

Tôi hiện đang viết chương trình để tắt máy tính trong một khoảng thời gian (khoảng nửa giờ) lưu lượng truy cập mạng thấp hơn một ngưỡng nhất định.Đo Dữ liệu Mạng với Python

Đây là giả mà tôi đã làm việc sẽ cung cấp cho logic đúng:

BEGIN SUBPROGRAM 
    loopFlag = True 
    Wait 5 minutes # Allows time for boot and for the machine to settle 
    traffic = 0 
    WHILE loopFlag = True DO 
     FOR sec = 0 to 3600 
      traffic += *network.traffic()* 
      wait 1 second 
     ENDFOR 
     IF traffic < trafficThreshold THEN 
      loopFlag = False 
     ENDIF 
    ENDWHILE 
    os.ShutDown() 
END SUBPROGRAM 

Những gì tôi đang tìm kiếm các mô-đun Python hoặc thư viện mà sẽ cho phép tôi để đo lường này là.

Trong khi tôi đã donevariousresearch vào đây, những điều này dường như không phải là loại chức năng tôi đang làm sau, bất kể ngôn ngữ của họ là gì.

Bất kỳ ý tưởng nào về cách triển khai tính năng này?

Trả lời

19

Để kiểm tra lưu lượng mạng trên hệ thống của bạn, tôi khuyên bạn nên nhìn vào psutilhere:

>>> psutil.network_io_counters(pernic=True) 
{'lo': iostat(bytes_sent=799953745, bytes_recv=799953745, packets_sent=453698, packets_recv=453698), 
'eth0': iostat(bytes_sent=734324837, bytes_recv=4163935363, packets_sent=3605828, packets_recv=4096685)} 
>>> 

Và để shutdown hệ điều hành của bạn, nếu bạn đang ở trên cửa sổ kiểm tra này: OS Reboot, Shutdown, Hibernate, Sleep, Wakeup (Windows Python)

và nếu bạn đang sử dụng linux/unix, sử dụng mô-đun subprocess để gửi lệnh shutdown/reboot.

+0

tôi sẽ xem xét nó. Tôi đã không gặp rắc rối với việc tắt máy, vì vậy thêm điểm brownie cho việc này. Tôi sẽ đánh dấu đúng nếu mọi thứ hoạt động. – nchpmn

+0

Nó hoạt động, cảm ơn! – nchpmn

+0

Có phải mỗi số liệu thống kê này trong một giây? – travis1097

-2

Và Bạn có thể theo dõi việc sử dụng mạng và viết các gói dữ liệu vào một tập tin với thư viện tập tin đơn giản như thế:

import socket 
HOST = socket.gethostbyname(socket.gethostname()) 
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) 
s.bind((HOST, 0)) 
while True: 
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) 
# receive all packages 
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 
# receive a package 
newfile = open("results.txt", "at") 
packets = (s.recvfrom(65565)[0],"hey", s.recvfrom(65565)[1]) 
newfile.write(str(packets[0])) 
newfile.write(str(packets[1])) 
newfile.write("\n") 
newfile.close() 
print (s.recvfrom(65565)) 
+3

Bạn có thể vui lòng chỉnh sửa trong phần giải thích đầy đủ hơn về lý do mã này trả lời câu hỏi không? Các câu trả lời chỉ có mã được [nản chí] (http://meta.stackexchange.com/q/148272/274165), bởi vì chúng không dạy giải pháp. –

Các vấn đề liên quan