Có một công cụ dòng lệnh dễ dàng cho gói đánh hơi một lệnh duy nhất trên linux không?


11

Tôi rất thích nếu có một công cụ dòng lệnh duy nhất cho gói đánh hơi một lệnh trong Linux. một cái gì đó giống như sniff dumpfile commandvậy để bạn có thể chạy lệnh bạn muốn đánh hơi gói trong thiết bị đầu cuối và nhận được một bãi chứa các gói ở nơi khác.

Tôi muốn kết xuất / lưu / chỉ xem lưu lượng mạng của một lệnh mà tôi nhập, không phải tất cả lưu lượng TCP trên giao diện mạng duy nhất của tôi. Vì vậy, nếu tôi đã đăng nhập vào máy tính của mình và có IRC chạy ở chế độ nền và tôi đã làm như vậy sniff somefile wget http://www.google.com, tôi muốn xem tất cả lưu lượng truy cập mạng mà lệnh wget đã làm để tải xuống http://www.google.com . Tôi không muốn 'somefile' có lưu lượng truy cập mạng IRC gây nhầm lẫn.

Có rất nhiều lệnh linux / unix chấp nhận một lệnh khác và làm một cái gì đó khác nhau. Từ sudo(chạy như siêu người dùng), nicethay đổi mức độ đẹp, trickle(giới hạn băng thông của lệnh)


1
Chính xác thì nó muốn làm gì? Bạn có muốn kiểm tra xem một lệnh nào đó có được chạy không? Bạn có muốn đánh hơi lưu lượng mạng? Bởi vì việc sử dụng cụm từ 'gói đánh hơi một lệnh' hoàn toàn không có ý nghĩa với tôi ...
wzzrd

wzzrd, xem câu hỏi mở rộng
Rory

Câu trả lời:


10

Không có bất cứ điều gì tôi biết, nhưng về mặt lý thuyết thì không khó để có được thứ gì đó tương tự. Strace có thể được sử dụng để chặn các tòa nhà chọc trời.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

Điều này sẽ cung cấp cho bạn thông tin về dữ liệu được gửi giữa kernel và tiến trình. Đầu ra của strace không chính xác như những gì bạn muốn. Tuy nhiên, strace sử dụng tòa nhà ptrace để chặn các cuộc gọi hệ thống. Có thể viết một chương trình để xuất dữ liệu hữu ích hơn một chút.

Ngoài ra, bạn cũng có thể chặn ổ cắm hữu ích, liên kết và lắng nghe các tòa nhà chọc trời. Có thể viết một chương trình nhỏ sử dụng ptrace cho các cuộc gọi và libpcap này để thay đổi động bộ lọc chụp mỗi khi mở ổ cắm mới.


Sẽ thật tuyệt nếu nó xuất ra thứ gì đó mà Wireshark có thể đọc được.
Brad Gilbert

Hãy nhớ rằng các bước được mô tả ở trên là chính xác cho Solaris (và có thể cả các Hiệp hội thương mại khác). Trên Linux, strace là một trình theo dõi cuộc gọi hệ thống, tương tự như hoạt động và đầu ra cho giàn trên Solaris hoặc tusc trên HP-UX.
James F

1
Tôi đã mô tả bước đi trên Linux.
David Pashley

8

Truy tìm

Tracesump là một gói sniffer IP ứng dụng duy nhất, nó nắm bắt tất cả các gói TCP và UDP của một quy trình Linux.

Tải xuống và mô tả tại đây: http://mutrics.iitis.pl/tracedump


1
Đây phải là câu trả lời chính xác ngay bây giờ.
h0tw1r3

4

Hãy thử Wireshark - lệnh sẽ là tshark

  • tshark cho phép bạn chọn các bộ lọc trên lưu lượng truy cập được chụp từ một giao diện
  • sử dụng các tiện ích khác như lsof debian để xác định loại giao tiếp được thực hiện bởi ứng dụng bạn quan tâm.

Hoặc, Bạn có thực sự chỉ muốn LSOF?


Tôi không nghĩ có một công cụ sẽ tự động tiếp tục lọc cho tất cả các giao tiếp liên quan đến một quy trình. Tuy nhiên, bạn có thể thử theo dõi quá trình giao tiếp bằng các công cụ như lsofvà một khi bạn có một bộ lọc tốt có thể cách ly giao tiếp của quá trình đó với tất cả lưu lượng truy cập khác đang chạy trên hệ thống của bạn, bạn có thể có được bản chụp chính xác.

Ví dụ, wgetthông thường, địa chỉ IP đích khác với lưu lượng liên quan đến quá trình khác. Ngay cả khi bạn lấy một cái gì đó như skypephạm vi cổng đích thường được cố định cho một ví dụ.


Đây là một chút giống như nguyên tắc không chắc chắn. Bạn thường có thể biết những gì đang diễn ra trong một tập hợp các đường dẫn giao tiếp (với bộ lọc sniffer trên nhóm luồng được xác định) hoặc nơi các liên kết giao tiếp khác nhau được tạo ra (với lsof).

Tôi thực sự muốn biết nếu cả hai có thể được thực hiện cho một ứng dụng. Tôi nghĩ nó nên khả thi. Nhưng, chưa thấy công cụ nào làm được điều đó.


lsof là tuyệt vời, nhưng tôi muốn xem những gì nó đang làm / gửi / nhận.
Rory

4

Tìm hiểu để sử dụng các biểu thức lọc.

Trong khi điều này sẽ không làm những thứ dấu vết ưa thích mà bạn đang yêu cầu.

Nó sẽ cho phép bạn loại bỏ gần như tất cả "những thứ khó hiểu như IRC" khỏi bản chụp.

Ngoài ra, rất hữu ích khi biết cú pháp bộ lọc để tham khảo nhanh trong tương lai.


2

Cụ thể đối với trình duyệt web / trang web, một cái gì đó như trình cắm Firebird cho Firefox có thể cung cấp cho bạn một số thông tin bạn đang tìm kiếm: http://getfireorms.com/net.html

Đối với các ứng dụng chung hơn, bạn có thể cần sử dụng netstat để xác định (các) cổng được sử dụng bởi ứng dụng và sau đó Wireshark / tshark / dtrace với bộ lọc để chỉ lưu lượng truy cập đó. Không phải là một câu trả lời mà bạn đang tìm kiếm mặc dù ...


1

Một ý tưởng, hãy thử VMWare

-thiết lập một vm -
cấu hình rằng vm để sử dụng một giao diện cụ thể
-sniff trên giao diện đó từ máy chủ (giống như một người đàn ông trong cuộc tấn công giữa)

Nếu bạn cô lập những ứng dụng mạng nào đang chạy trên vm đó, bạn có thể có câu trả lời của mình

Một giải pháp lý tưởng hơn, tôi cho rằng, là làm những gì VMWare làm theo cách nó chỉ định cách nó chọn một giao diện để nói chuyện. Tôi nghĩ rằng phép thuật của nó đến từ các mô-đun hạt nhân mà nó sử dụng, trong trường hợp này, có lẽ là mô-đun hạt nhân vmnet.

Theo hiểu biết của tôi, các ứng dụng không nhận thức được giao diện nào họ nói và tôi tin rằng đây là do thiết kế; họ không cần phải lo lắng về những điều như vậy.

Hơn nữa, có
lẽ một chương trình đã tồn tại, tôi không biết. Nhưng nếu một trong số đó đã được viết, bạn có thể gọi nó là nettrace (ví dụ) và Cách sử dụng có thể giống như

giao diện chương trình nettrace

sau đó đánh hơi giao diện mà nó sử dụng và thêm các tuyến đường (có thể nó tự động thực hiện) vào giao diện thực của bạn


vâng, điều đó là có thể Tuy nhiên, thật tuyệt nếu có một công cụ đơn giản và nhanh chóng để làm điều đó ,.
Rory

Có lẽ đã đến lúc cho công cụ đơn giản này? Tôi tự hỏi liệu điều đó có khó không, có lẽ mod vmnet có thể là điểm khởi đầu tốt (mặc dù tôi không biết liệu có vấn đề về cấp phép hay không). Có lẽ (một hack) chỉ cần sử dụng mod vmnet. Tôi biết tôi quan tâm đến những câu hỏi như thế này thường xuyên.
rev

1

Giả sử rằng bạn là người duy nhất trên hộp cố gắng kết nối với google vào thời điểm đó, tôi nghĩ rằng một cái gì đó như thế này sẽ thực hiện thủ thuật:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

Nếu bạn không phải là kết nối duy nhất cố gắng kết nối với google trên hộp, thì nếu bạn có thể xác định IP / cổng bạn đang kết nối từ bạn cũng có thể chỉ định ip src port / src.

Xác định cổng src có thể là một vấn đề trừ khi bạn có thể chỉ định nó trên bất kỳ ứng dụng khách nào bạn sử dụng. Tôi không chắc nếu bạn có thể với wget.

Tôi hoàn toàn nghi ngờ rằng bạn có thể chỉ định cả hai cổng src và dst netcatvì vậy nếu đó thực sự là google mà bạn quan tâm, bạn có thể thực hiện GET (thủ công) thông qua netcat.

Tất nhiên trang người đàn ông sẽ cung cấp cho bạn chi tiết cụ thể


1

Trang man tcpdump và nhiều trang web đưa ra các ví dụ chuyên sâu về các bộ lọc và thậm chí còn có một vài kho lưu trữ trực tuyến các biểu thức lọc tcpdump. Nó sẽ có thể làm hầu hết mọi thứ bạn có thể mơ ước, giả sử rằng bạn biết điều gì đó về lưu lượng mạng (nguồn, đích, cổng, giao thức, v.v.) ngoài những gì chương trình đang tạo ra.

Nếu bạn đang làm việc trên một máy chủ hoặc hộp không đầu, bạn luôn có thể yêu cầu tcpdump viết một tệp kết xuất và sau đó mở nó trong Wireshark trên máy trạm của bạn và nhận bộ lọc nâng cao và giao diện đồ họa.


Erm, chuyển sang lệnh tcpdump sẽ giới hạn nó trong một ứng dụng duy nhất tạo ra lưu lượng?
Milan Babuškov

1

Có thể tập lệnh này sẽ làm những gì bạn muốn với các sửa đổi phù hợp với lệnh tshark:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

Đọc tệp kết xuất sau:

tshark -r dump

Bạn đang chụp cổng 8080 nhưng tạo lưu lượng trên cổng 80; điều này sẽ không làm những gì bạn dự định.
James F

James: Proxy của tôi kết nối với 8080, đó là cách tôi chạy tập lệnh. Tôi nên thay đổi nó 80 cho mục đích của bài viết này.
Không phải bây giờ

0

Dtrace nên cho phép điều này, mặc dù tôi không biết liệu nó đã biến nó thành Linux chưa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.