Tôi đã thử điều này:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Tôi chỉ cần một phần ascii của nó. Làm thế nào để tôi loại bỏ phần còn lại?
Tôi đã thử điều này:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Tôi chỉ cần một phần ascii của nó. Làm thế nào để tôi loại bỏ phần còn lại?
Câu trả lời:
Như Josh gợi ý, tcpflow chỉ có thể in dữ liệu gói TCP sang tệp hoặc STDOUT. Bạn có thể chuyển tcpdump sang tcpflow như thế này:
tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
Để chỉ xem một mặt của cuộc nói chuyện, bạn có thể sử dụng bộ lọc cho tcpdump, ví dụ dst port 23
.
tcpflow
như root?
Tôi không chắc chắn về cú pháp chính xác cho tcpdump
... trên thực tế, tôi đã đánh dấu câu hỏi này là một yêu thích vì tôi muốn biết! Nhưng như một giải pháp thay thế, bạn có thể thử sử dụng tcpflow
thay thế. Nó hoạt động về cơ bản theo cùng một cách, nhưng nó in đầu ra ASCII tốt hơn nhiều; nó loại trừ các tiêu đề và in các gói tuần tự như một luồng, vì vậy đôi khi dễ đọc và theo dõi hơn tcpdump
.
Tôi cảm thấy giải pháp thanh lịch nhất là chỉ cần bỏ tcpdump. Không có loại ống nào:
tcpflow -c port 6667
Và đó là nó.
Một cách nhanh chóng và bẩn để làm điều này là lọc đầu ra thông qua các chuỗi:
tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
Đôi khi bạn không có các công cụ khác và để xem nhanh tải trọng này là đủ. Tất nhiên, sẽ không tốt nếu bạn cần tải trọng chính xác để tiêm hoặc phân tích chính xác.
Nếu bạn chỉ cần phần ASCII, bạn có thể sử dụng: tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g'
hoặc với ngrep:ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'