2012-04-16 29 views
6

Tôi đang kết nối với một người nghe telnet. Máy chủ Telnet gửi "1234" cho mỗi giây. Tôi muốn đọc thông báo "1234" và đóng phiên telnet. Dưới đây là mã của tôi nhưng nó không hoạt động.Tập lệnh Linux để phân tích cú pháp tin nhắn telnet và thoát khỏi

#!/bin/bash 
telnet 192.168.10.24 1234 
read $RESPONSE 
echo "Response is"$RESPONSE 
echo "quit" 

Tôi có thể tự động đọc tin nhắn telnet bằng cách nào?

Trả lời

5

bạn có thể sử dụng cơ chế TCP nội bộ:

#!/bin/bash 

exec 3<>/dev/tcp/127.0.0.1/80 
# echo -en "eventualy send something to the server\n" >&3 
RESPONSE="`cat <&3`" 
echo "Response is: $RESPONSE" 

Hoặc bạn có thể sử dụng nc (netcat), nhưng xin đừng chúng tôi e telnet!

+0

Cảm ơn bạn! Nó đã làm việc! Nhưng cái gì là cho "3 <>" và "' mèo <& 3' ". Họ có đang chỉ đạo STDIN đến RESPONSE không? – user1336117

+1

Bạn có thể kiểm tra đoạn REDIRECTION trên trang bash man để xem cách/dev/tcp, exec và <> làm việc như thế nào. Về cơ bản, bạn yêu cầu bash mở để đọc và viết, trên cùng một trình bao, bộ mô tả tập tin # 3 và đính kèm nó vào luồng TCP trên 127.0.0.1 cổng 80. – dAm2K

0

bạn cần sử dụng mong đợi, tôi sợ đó là một trường hợp bạn cần phải kiểm tra hướng dẫn từ đó trong như mong đợi nó có hiệu lực đó là ngôn ngữ riêng cho phân tích sản lượng ứng dụng và tác động lên kết quả

+0

Cảm ơn bạn, tôi sẽ đọc về những mong đợi và sau đó viết kết quả ở đây. – user1336117

1

Redirect đầu ra vào một tập tin và đọc từ tập tin

telnet [ip-address] > /tmp/tempfile.txt 
+0

Nó đang hoạt động nhưng tôi nhận được một số chuỗi không cần thiết như "Đang thử 192.168.10.24 ...". Tôi nghĩ rằng tôi không thể sử dụng telnet cho giao tiếp ethernet giữa các thiết bị. Tôi nghĩ rằng tôi phải thực hiện chương trình socket của riêng tôi. Bạn có gợi ý nào không? – user1336117

+0

chỉ cố gắng loại bỏ các dòng bạn không yêu cầu. như grep -v "dòng không mong muốn" sẽ hoạt động và chương trình socket có thể tốn kém hơn thế này. nhưng một lần nữa tất cả phụ thuộc vào req của bạn. – siva

1

Phương pháp đơn giản và dễ nhất được đưa ra dưới đây.

sleep <n> | telnet <server> <port> 

n - Thời gian chờ đợi trong vài giây trước khi thoát ra tự động. Nó có thể phân số như 0,5. Lưu ý rằng một số đầu ra yêu cầu có thể không được trả lại trong thời gian chờ đã chỉ định. Vì vậy, chúng tôi có thể cần phải tăng tương ứng.

máy chủ - IP máy chủ đích hoặc tên máy chủ.

cổng - Số cổng dịch vụ mục tiêu.

Bạn cũng có thể chuyển hướng đầu ra để nộp như thế này,

sleep 1 | telnet <server> <port> > output.log 
0

Đã trả lời, nhưng đây là một quan điểm khác sử dụng curl, hữu ích cho kiểm tra nhanh (tức là dịch vụ hoạt động hay không). Tôi đã phải đấu tranh một chút tránh "kịch bản" và "mong đợi" giải pháp.

Chỉ cần một sơ khai để kiểm tra POP3 thể:

echo "quit" | curl telnet://localhost:110 > /tmp/telnet_session.txt 
if grep "POP3 ready" /tmp/telnet_session.txt; then 
     echo "POP3 OK" 
else 
     echo "POP3 KO" 
fi 
Các vấn đề liên quan