Cách dễ nhất để đánh hơi dữ liệu lưu lượng TCP trên Linux là gì?


79

Tôi muốn một cách đơn giản để hiển thị tất cả dữ liệu TCP (không phải tiêu đề TCP hoặc bất cứ thứ gì khác) đi qua bất kỳ giao diện nào trên hộp Linux của tôi.

Ví dụ, tôi muốn một lệnh ma thuật mà nếu tôi làm:

magic_commmand_I_want port=1234

sau đó nếu có một máy chủ lắng nghe cổng 1234 trên máy của tôi và ai đó đã làm:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port

Sau đó, lệnh ma thuật sẽ in ra:

hello

Tôi đã thử "tcpdump", "ethereal", "tethereal", "tshark" và những thứ khác, nhưng không rõ ràng bằng cách nào bạn đưa chúng đến:

  • không hiển thị địa chỉ IP hoặc siêu dữ liệu khác
  • chỉ hiển thị "dữ liệu" được gửi, không hiển thị các gói riêng lẻ và các tiêu đề của chúng
  • in dữ liệu nguyên trạng, không ở dạng hex và không bằng dấu đánh dấu gói
  • đánh hơi tất cả lưu lượng truy cập mạng (cho dù đó là trên eth0 hoặc eth1 hoặc lo , v.v ...)

Vâng, có lẽ bạn có thể xâu chuỗi một tập hợp các lệnh unix để thực hiện việc này, nhưng điều đó không dễ nhớ cho lần sau :)

Nếu bạn có một ví dụ đơn giản về một dòng lệnh chính xác thực hiện điều này, thì đó là điều tôi muốn.


2
tcpdump là lệnh ma thuật bạn muốn. Wireshark là một GUI đẹp trên đầu thư viện sử dụng tcpdump
Vinko Vrsalovic

3
Tôi biết đây là một câu hỏi cũ nhưng tôi tò mò muốn biết tại sao sử dụng nc cho "phía máy chủ" cũng không phải là một lựa chọn? "Nc -l 1234" tạo một máy chủ lắng nghe trên cổng 1234 và in ra bất cứ thứ gì được gửi đến nó và đóng kết nối. Nếu bạn muốn duy trì kết nối và không ngắt kết nối, bạn có thể thêm tùy chọn "-k".
StFS

2
@StFS vì anh ta muốn đánh hơi một cổng đang chạy và nc sẽ phàn nàn.
đăng

Câu trả lời:


106

Cập nhật:

Như Michal đã chỉ ra trong các nhận xét: Từ phiên bản tcpflow 1.3, tùy chọn -e được sử dụng để chỉ định tên máy quét. Vì vậy, lỗi "Tên máy quét không hợp lệ '8983'" được in. Lệnh đúng là

sudo tcpflow -i any -C -J port 1234

(cũng -Jđã được thay đổi thành -gbản phát hành mới nhất)


Cảm ơn các yves đã chỉ cho tôi " tcpflow ". Đây là dòng cam kết:

tcpflow -i any -C -e port 1234  # as root, or with sudo

Đây là tất cả mọi thứ tôi muốn

  • hiển thị byte dữ liệu theo byte khi nó xuất hiện
  • không hiển thị bất kỳ siêu dữ liệu nào khác
  • lắng nghe trên tất cả các giao diện (để nó thu thập dữ liệu đến từ bên trong máy và bên ngoài)

" -C" Bảo nó đổ vào bảng điều khiển thay vì tệp. " -e" Cho phép màu sắc để máy khách-> máy chủ và máy chủ-> máy khách khác biệt rõ ràng.

Tôi đã cài đặt tcpflow bằng cách đơn giản là làm

sudo apt-get install tcpflow

2
Ồ tcpflow là tuyệt vời, cảm ơn! Tiết kiệm cho tôi một TONNE của nỗi đau tôi đang có với wireshark. Wireshark, tcpdump, v.v ... có quá nhiều thông tin và không thực sự làm những gì câu hỏi ban đầu yêu cầu. tcpflow là hoàn hảo cho việc này.
Nga

10
Từ phiên bản tcpflow 1.3, -etùy chọn được sử dụng để chỉ định tên máy quét. Vì vậy, lỗi "Tên máy quét không hợp lệ '8983'" được in. Lệnh chính xác làsudo tcpflow -i any -C -J port 1234
Michal Kováč

6
Lưu ý rằng -Jđã được thay đổi thành -gtrong (các) bản phát hành mới nhất.
tvon

2
Ai đó cần giải thích cho các tác giả của công cụ về thuật ngữ "tương thích ngược" nghĩa là gì!
Sridhar Sarnobat

Nó in "những thứ" hai lần, đối với tôi. Tại sao vậy ? lpaste.net/3984129577801744384
user1198559

29

socat là công cụ bạn đang yêu cầu. Nó có thể hoạt động như một proxy:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

sau đó ứng dụng của bạn phải kết nối cổng 4444 thay vì kết nối trực tiếp với 1234

Tùy chọn -v dành cho socat để in ra mọi thứ nó nhận được trên lỗi tiêu chuẩn (stderr).

Cập nhật:

Nếu socat không có sẵn trên máy của bạn, bạn vẫn có thể mô phỏng theo cách đó với netcat:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

hãy cẩn thận: tùy chọn này là đơn hướng. phiên bản netcat thứ hai sẽ in bất kỳ phản hồi nào từ máy chủ của bạn sang đầu ra tiêu chuẩn. Bạn vẫn có thể làm sau đó:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo

Giả sử tôi không có quyền kiểm soát máy khách và máy chủ, (hoặc tôi không muốn dừng nó), vì vậy tôi không thể thay đổi cổng nào có liên quan hoặc chặn lưu lượng. Rồi sao?

20

Hãy thử Wireshark . Đây là một công cụ phân tích giao thức tuyệt vời được nhắm mục tiêu cho cả Linux và Windows.


3
Kinh nghiệm của tôi là giao diện thực sự hấp dẫn trên linux.
Joe Phillips

chết tiệt, bạn đã đến đó trước tôi, +1 trên wireshark

Bạn có thể đưa ra một dòng lệnh ví dụ?

Hãy xem liên kết này wiki.wireshark.org/Tools Nó cung cấp một danh sách các công cụ dòng lệnh cho wireshark. Xem ra cho Dumpcap.
Kevin Boyd

13

tcpflow là những gì bạn muốn. Trích xuất từ ​​trang người đàn ông:

MÔ TẢ
tcpflow là một chương trình thu thập dữ liệu được truyền dưới dạng một phần của các kết nối TCP (luồng) và lưu trữ dữ liệu theo cách thuận tiện cho việc phân tích hoặc gỡ lỗi giao thức. Một chương trình như tcpdump (4) hiển thị tóm tắt các gói được nhìn thấy trên dây, nhưng thường không lưu trữ dữ liệu thực sự được truyền đi. Ngược lại, tcpflow tái tạo lại các luồng dữ liệu thực tế và lưu trữ từng luồng trong một tệp riêng để phân tích sau. tcpflow hiểu các số thứ tự TCP và sẽ xây dựng lại chính xác các luồng dữ liệu bất kể truyền lại hoặc phân phối không theo thứ tự.

tcpflow lưu trữ tất cả dữ liệu bị bắt trong các tệp có tên của biểu mẫu

192.168.101.102.02345-010.011.012.013,45103

trong đó nội dung của tệp trên sẽ là dữ liệu được truyền từ máy chủ 192.168.101.102 cổng 2345, đến máy chủ 10.11.12.13 cổng 45103.

Thiết lập kết nối từ ứng dụng của bạn đến máy chủ của bạn. Khi kết nối được bật và chạy, tcpflow vẫn có thể thu thập dữ liệu từ nó Ví dụ:

$ sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

Mọi dữ liệu sẽ được lưu trữ trong một tệp có tên 127.000.000.001.48842-127.000.000.001.05555.

Bạn vẫn có thể chuyển hướng này trên đầu ra tiêu chuẩn với tùy chọn -Cs. Đọc trang hướng dẫn để chơi với biểu thức để điều chỉnh các paquets bạn muốn tcpflow để chụp.


2

ngreplà rất tốt cho việc này. Nó cần một chuỗi BPF và một chuỗi tùy chọn để tìm kiếm trong các gói và sau đó kết xuất nội dung gói để sàng lọc theo một định dạng khá hữu ích. Nó cũng tùy ý chuyển sang tệp pcap_dump mà bạn có thể kiểm tra kỹ hơn trong Wireshark sau này.


0

Hãy nhìn vào Chaosreader . Mặc dù nó làm nhiều hơn một chút so với bạn yêu cầu và hơi khác một chút, nhưng có lẽ bạn có thể sửa đổi mã của nó để làm những gì bạn muốn.


-1

Có lẽ bạn có thể viết một trình bao bọc cho tcpdump, ví dụ, việc này sẽ xóa tất cả thông tin dư thừ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.