Hướng dẫn how does python capture network traffic? - làm thế nào để python nắm bắt lưu lượng mạng?

Tôi đang sử dụng Python và cố gắng xóa lưu lượng truy cập HTTP (s) giữa máy tính của tôi và một trang web, bao gồm tất cả các yêu cầu, phản hồi, phản hồi, như hình ảnh và các cuộc gọi bên ngoài, v.v.

Tôi đã cố gắng tìm lưu lượng mạng trong hàm hit_site của mình, nhưng tôi không tìm thấy thông tin.

hit_site("http://www.google.com")

def hit_site(url):
    print url
    r = requests.get(url,stream = True)
    print r.headers
    print r.encoding
    print r.status_code
    print r.json()
    print requests.get(url,stream=True)
    print r.request.headers
    print r.response.headers
    for line in r.iter_lines():
        print line
    data = r.text
    soup = BeautifulSoup(data)
    return soup

Một ví dụ về loại thông tin mà tôi muốn nắm bắt là những điều sau đây (tôi đã sử dụng fiddler2 để có được thông tin này. Tất cả những điều này và nhiều hơn nữa đến từ việc truy cập groupon.com):

#   Result  Protocol    Host    URL Body    Caching Content-Type    Process Comments    Custom  
6   200 HTTP    www.groupon.com /   23,236  private, max-age=0, no-cache, no-store, must-revalidate text/html; charset=utf-8    chrome:6080         
7   200 HTTP    www.groupon.com /homepage-assets/styles-6fca4e9f48.css  6,766   public, max-age=31369910    text/css; charset=UTF-8 chrome:6080         
8   200 HTTP    Tunnel to   img.grouponcdn.com:443  0           chrome:6080         
9   200 HTTP    img.grouponcdn.com  /deal/gsPCLbbqioFVfvjT3qbBZo/The-Omni-Mount-Washington-Resort_01-960x582/v1/c550x332.jpg    94,555  public, max-age=315279127; Expires: Fri, 18 Oct 2024 22:20:20 GMT   image/jpeg  chrome:6080         
10  200 HTTP    img.grouponcdn.com  /deal/d5YmjhxUBi2mgfCMoriV/pE-700x420/v1/c220x134.jpg   17,832  public, max-age=298601213; Expires: Mon, 08 Apr 2024 21:35:06 GMT   image/jpeg  chrome:6080         
11  200 HTTP    www.groupon.com /homepage-assets/main-fcfaf867e3.js 9,604   public, max-age=31369913    application/javascript  chrome:6080         
12  200 HTTP    www.groupon.com /homepage-assets/locale.js?locale=en_US&country=US  1,507   public, max-age=994 application/javascript  chrome:6080         
13  200 HTTP    www.groupon.com /tracky 3       application/octet-stream    chrome:6080         
14  200 HTTP    www.groupon.com /cart/widget?consumerId=b577c9c2-4f07-11e4-8305-0025906127fe    17  private, max-age=0, no-cache, no-store, must-revalidate application/json; charset=utf-8 chrome:6080         
15  200 HTTP    www.googletagmanager.com    /gtm.js?id=GTM-B76Z 39,061  private, max-age=911; Expires: Wed, 22 Oct 2014 20:48:14 GMT    text/javascript; charset=UTF-8  chrome:6080         

Tôi sẽ đánh giá rất cao bất kỳ ý tưởng nào về cách nắm bắt lưu lượng mạng bằng Python.any ideas as to how capture the network traffic using python.

Ảnh của Kirill Sh trên unplash

Bạn đã bao giờ muốn thêm phân tích gói vào một chương trình hiện có? Bạn đã bao giờ cần phải chụp gói và làm cho đầu ra dễ đọc hơn một chút? Làm việc với các công cụ tiêu chuẩn như Wireshark hoặc TCPDUMP có thể được khá phức tạp.

Cố gắng gây nhiễu một loạt các tham số TCPDUMP với nhau là cồng kềnh tốt nhất. Làm việc với Wireshark trên dòng lệnh cũng hầu như không thể


Sniffing hoặc Gói mạng đánh hơi là quá trình giám sát và chụp tất cả các gói đi qua một mạng nhất định bằng cách sử dụng các công cụ đánh hơi. Đó là một hình thức trong đó, chúng ta có thể khai thác dây điện thoại và làm quen với cuộc trò chuyện. Nó cũng được gọi là nghe lén và có thể được áp dụng cho các mạng máy tính.wiretapping and can be applied to the computer networks.

Có rất nhiều khả năng là nếu một tập hợp các cổng chuyển đổi doanh nghiệp được mở, thì một trong những nhân viên của họ có thể đánh hơi toàn bộ lưu lượng truy cập của mạng. Bất cứ ai ở cùng một vị trí vật lý đều có thể cắm vào mạng bằng cáp Ethernet hoặc kết nối không dây với mạng đó và đánh hơi tổng lưu lượng.

Nói cách khác, việc đánh hơi cho phép bạn thấy tất cả các loại lưu lượng truy cập, cả được bảo vệ và không được bảo vệ. Trong đúng điều kiện và với các giao thức phù hợp, một bên tấn công có thể thu thập thông tin có thể được sử dụng để tấn công thêm hoặc gây ra các vấn đề khác cho mạng hoặc chủ sở hữu hệ thống.

Điều gì có thể được đánh hơi?

Người ta có thể đánh hơi các thông tin nhạy cảm sau đây từ mạng -

  • Lưu lượng truy cập email
  • Mật khẩu FTP
  • Buôn bán web
  • Mật khẩu telnet
  • Cấu hình bộ định tuyến
  • Buổi trò chuyện
  • Lưu lượng truy cập DNS

Sniffing hoạt động như thế nào?

Một sniffer thường biến NIC của hệ thống sang chế độ lăng nhăng để nó lắng nghe tất cả dữ liệu được truyền trên phân khúc của nó.

Chế độ lăng nhăng đề cập đến cách duy nhất của phần cứng Ethernet, đặc biệt là thẻ giao diện mạng (NIC), cho phép NIC nhận tất cả lưu lượng truy cập trên mạng, ngay cả khi nó không được gửi đến NIC này. Theo mặc định, một NIC bỏ qua tất cả lưu lượng truy cập không được gửi đến nó, được thực hiện bằng cách so sánh địa chỉ đích của gói Ethernet với địa chỉ phần cứng (MAC) của thiết bị. Mặc dù điều này có ý nghĩa hoàn hảo cho việc kết nối mạng, chế độ không thích hợp gây khó khăn cho việc sử dụng phần mềm giám sát và phân tích mạng để chẩn đoán các vấn đề kết nối hoặc kế toán giao thông.

Người đánh hơi có thể liên tục theo dõi tất cả lưu lượng truy cập đến máy tính thông qua NIC bằng cách giải mã thông tin được đóng gói trong các gói dữ liệu.

Các loại đánh hơi

Sniffing có thể hoạt động hoặc thụ động trong tự nhiên. Bây giờ chúng ta sẽ tìm hiểu về các loại đánh hơi khác nhau.

Đánh hơi thụ động

Trong việc đánh hơi thụ động, giao thông bị khóa nhưng nó không bị thay đổi theo bất kỳ cách nào. Sniffing thụ động chỉ cho phép nghe. Nó hoạt động với các thiết bị trung tâm. Trên một thiết bị trung tâm, lưu lượng được gửi đến tất cả các cổng. Trong một mạng sử dụng các trung tâm để kết nối các hệ thống, tất cả các máy chủ trên mạng đều có thể thấy lưu lượng truy cập. Do đó, một kẻ tấn công có thể dễ dàng bắt được lưu lượng truy cập đi qua.

Tin tốt là các trung tâm gần như đã trở nên lỗi thời trong thời gian gần đây. Hầu hết các mạng hiện đại sử dụng công tắc. Do đó, đánh hơi thụ động không còn hiệu quả nữa.

Đánh hơi tích cực

Trong việc đánh hơi tích cực, lưu lượng truy cập không chỉ bị khóa và theo dõi, mà còn có thể bị thay đổi theo một cách nào đó như được xác định bởi cuộc tấn công. Sniffing hoạt động được sử dụng để đánh hơi một mạng dựa trên chuyển đổi. Nó liên quan đến việc tiêm các gói độ phân giải địa chỉ (ARP) vào mạng mục tiêu để tràn vào bảng bộ nhớ địa chỉ nội dung chuyển đổi (CAM). Cam theo dõi máy chủ được kết nối với cổng nào.

Sau đây là các kỹ thuật đánh hơi hoạt động -

  • Lũ mac
  • Các cuộc tấn công của DHCP
  • Ngộ độc DNS
  • Tấn công giả mạo
  • Ngộ độc ARP

Các hiệu ứng đánh hơi trên các giao thức

Các giao thức như TCP/IP đã thử và thực sự không bao giờ được thiết kế với bảo mật. Các giao thức như vậy không cung cấp nhiều khả năng chống lại những kẻ xâm nhập tiềm năng. Sau đây là các giao thức khác nhau cho vay để dễ hiểu -tried and true TCP/IP were never designed with security in mind. Such protocols do not offer much resistance to potential intruders. Following are the different protocols that lend themselves to easy sniffing −

HTTP

Nó được sử dụng để gửi thông tin trong văn bản rõ ràng mà không có bất kỳ mã hóa nào và do đó là mục tiêu thực sự.

SMTP (Giao thức chuyển thư đơn giản)

SMTP được sử dụng trong việc chuyển email. Giao thức này là hiệu quả, nhưng nó không bao gồm bất kỳ sự bảo vệ nào chống lại việc đánh hơi.

NNTP (Giao thức chuyển tin tức mạng)

Nó được sử dụng cho tất cả các loại giao tiếp. Một nhược điểm lớn với điều này là dữ liệu và thậm chí mật khẩu được gửi qua mạng dưới dạng văn bản rõ ràng.

Pop (Giao thức Bưu điện)

Pop được sử dụng nghiêm ngặt để nhận email từ các máy chủ. Giao thức này không bao gồm bảo vệ chống lại việc đánh hơi vì nó có thể bị mắc kẹt.

FTP (Giao thức truyền tệp)

FTP được sử dụng để gửi và nhận tệp, nhưng nó không cung cấp bất kỳ tính năng bảo mật nào. Tất cả các dữ liệu được gửi dưới dạng văn bản rõ ràng có thể dễ dàng đánh hơi.

IMAP (Giao thức truy cập tin nhắn Internet)

IMAP giống như SMTP trong các chức năng của nó, nhưng nó rất dễ bị đánh hơi.

Telnet

Telnet gửi tất cả mọi thứ (tên người dùng, mật khẩu, tổ hợp phím) qua mạng dưới dạng văn bản rõ ràng và do đó, nó có thể dễ dàng đánh hơi.

Sniffers không phải là những tiện ích ngu ngốc cho phép bạn chỉ xem lưu lượng truy cập trực tiếp. Nếu bạn thực sự muốn phân tích từng gói, hãy lưu chụp và xem xét bất cứ khi nào thời gian cho phép.

Thực hiện bằng cách sử dụng Python

Trước khi thực hiện sniffer socket thô, hãy cho chúng tôi hiểu phương thức cấu trúc như được mô tả bên dưới -struct method as described below −

struct.pack (FMT, A1, A2, Mạnh)

Như tên cho thấy, phương pháp này được sử dụng để trả về chuỗi, được đóng gói theo định dạng đã cho. Chuỗi chứa các giá trị A1, A2, v.v.

struct.unpack (fmt, chuỗi)

Như tên cho thấy, phương pháp này giải nén chuỗi theo một định dạng nhất định.

Trong ví dụ sau đây về tiêu đề IP Sniffer của SSOCKFER RAW, đây là 20 byte tiếp theo trong gói và trong số 20 byte này, chúng tôi quan tâm đến 8 byte cuối cùng. Các byte sau hiển thị nếu địa chỉ IP nguồn và đích đang phân tích cú pháp -

Bây giờ, chúng ta cần nhập một số mô -đun cơ bản như sau -

import socket
import struct
import binascii

Bây giờ, chúng tôi sẽ tạo một ổ cắm, sẽ có ba tham số. Tham số đầu tiên cho chúng tôi biết về giao diện gói - pf_packet cho linux cụ thể và af_inet cho windows; Tham số thứ hai cho chúng tôi biết rằng đó là một ổ cắm thô và tham số thứ ba cho chúng tôi biết về giao thức mà chúng tôi quan tâm đến Lốc0x0800 được sử dụng cho giao thức IP.

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))

Bây giờ, chúng ta cần gọi phương thức recvFrom () để nhận gói.recvfrom() method to receive the packet.

while True:
   packet = s.recvfrom(2048)

Trong dòng mã sau, chúng tôi đang xé toạc tiêu đề Ethernet -

ethernet_header = packet[0][0:14]

Với dòng mã sau đây, chúng tôi đang phân tích cú pháp và giải nén tiêu đề bằng phương pháp struct -struct method −

eth_header = struct.unpack("!6s6s2s", ethernet_header)

Dòng mã sau đây sẽ trả về một tuple với ba giá trị hex, được chuyển đổi bởi hexify trong mô -đun Binascii -hexify in the binascii module −

print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])

Bây giờ chúng ta có thể nhận được tiêu đề IP bằng cách thực hiện dòng mã sau -

ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])

Tương tự, chúng ta cũng có thể phân tích cú định tiêu đề TCP.

Làm thế nào để Python giám sát lưu lượng mạng?

Nhập psutil nhập thời gian update_delay = 1 # tính bằng giây def get_size (byte): "" "Trả về kích thước byte ở định dạng đẹp" "" cho đơn vị trong ['', 'k', 'm', 'g', ' T ',' p ']: Nếu byte <1024: return f "{byte: .2f} {ict} b" byte /= 1024 ..
# Nhận số liệu thống kê I/O của mạng từ psutil io = psutil ..

Lưu lượng truy cập mạng được ghi lại như thế nào?

Để nắm bắt lưu lượng mạng, bạn có thể sử dụng TCPDUMP.Đây là một người đánh hơi gói có thể quan sát và ghi lại lưu lượng mạng trên giao diện.Trong ví dụ sau, chúng tôi thu được 1.000 gói bằng TCPDUMP.Một cách dễ dàng hơn để phân tích lưu lượng truy cập mạng là sử dụng máy phân tích lưu lượng mạng thực tế, chẳng hạn như Wireshark.use tcpdump. This is a packet sniffer that can observe and record network traffic on an interface. In the following example, we capture 1,000 packets using tcpdump. An easier way to analyze network traffic is to use an actual network traffic analyzer, such as Wireshark.

Làm thế nào để bạn nắm bắt các gói trong Python?

Một người đánh hơi gói đơn giản trong Python có thể được tạo với mô -đun ổ cắm trợ giúp.Chúng ta có thể sử dụng loại ổ cắm thô để có được các gói.Một ổ cắm thô cung cấp quyền truy cập vào các giao thức cơ bản, hỗ trợ trừu tượng ổ cắm.. We can use the raw socket type to get the packets. A raw socket provides access to the underlying protocols, which support socket abstractions.

Làm thế nào để bạn cạo dữ liệu từ một mạng trong Python?

Để trích xuất dữ liệu bằng cách sử dụng máy quét web với Python, bạn cần làm theo các bước cơ bản sau:..
Tìm URL mà bạn muốn cạo ..
Kiểm tra trang ..
Tìm dữ liệu bạn muốn trích xuất ..
Viết mã ..
Chạy mã và trích xuất dữ liệu ..
Lưu trữ dữ liệu theo định dạng cần thiết ..