2009-04-02 30 views
39

Có ai biết cách dễ dàng để tạo tập lệnh có thể kết nối với máy chủ telnet, thực hiện một số công cụ telnet thông thường và sau đó đăng xuất không? Tôi đang đối phó với những người dùng không quen thuộc với telnet và các lệnh họ sẽ cần để chạy. Tất cả những gì tôi muốn là cho họ nhấp đúp vào một tập lệnh và để tập lệnh đó tự động thực hiện các lệnh cho chúng.Tạo tập lệnh cho phiên Telnet?

Có thể bạn đang tự hỏi "Người dùng trên nền tảng nào?" Chúng sẽ có trên cả Windows và Linux. Việc triển khai bằng các ngôn ngữ như Perl, Java hoặc Python được chấp nhận. Tôi thấy rằng Perl có một mô-đun Net :: Telnet. Có ai sử dụng nó không?

Giải pháp lý tưởng của tôi là tạo hai tệp tập lệnh. một tệp BAT cho các cửa sổ và một kịch bản lệnh shell cho Linux. Trong khi điều này sẽ làm cho bảo trì kép một vấn đề, nó sẽ có nghĩa là tôi sẽ không phải cài đặt Perl/Java/Python/etc ... trên mỗi máy. Thật không may, tôi đã không thấy bất kỳ cách nào để tự động hóa một phiên telnet với các tập tin batch hoặc các kịch bản shell.

Cảm ơn.

+0

Sử dụng mô-đun telnetlib python. Ví dụ ở đây http://stackoverflow.com/questions/1491494/telnet-automation-scripting – Vanuan

Trả lời

12

Expect được xây dựng cho điều này và có thể xử lý đầu vào/đầu ra cộng với thời gian chờ vv Lưu ý rằng nếu bạn không phải là người hâm mộ TCL, có các mô-đun mong đợi cho Perl/Python/Java.

EDIT: Các trang trên gợi ý rằng the Wikipedia Expect nhập là một nguồn tài nguyên hữu ích :-)

+1

Mong đợi việc triển khai cũng có sẵn bằng các ngôn ngữ khác, như mô-đun Expect.pm của Perl, nếu bạn không muốn học TCL. –

+1

Phân phối Mong đợi bao gồm một tập lệnh có tên là autoexpect, nó sẽ tạo ra một kịch bản mong đợi bằng cách xem một phiên. Kịch bản được tạo ra đủ đơn giản để tinh chỉnh. – sigjuice

+3

TCL/TK rất nhiều vì có các công cụ được viết với nó - đơn giản vì các phụ thuộc không thể được đáp ứng đầy đủ trên các hệ thống nhúng ... hãy quên đi tất cả các crap và chỉ sử dụng netcat = hầu như không tải CPU. –

31

Tôi đã sử dụng phương pháp khác nhau cho các phiên telnet kịch bản dưới unix, nhưng đơn giản nhất có lẽ là một chuỗi các tiếng vang và ngủ lệnh , với đầu ra của họ đường ống vào telnet. Đường ống đầu ra vào lệnh khác cũng là một khả năng.

dụ Silly

 
(echo password; echo "show ip route"; sleep 1; echo "quit") | telnet myrouter 

này (basicallly) lấy bảng định tuyến của một router Cisco.

+0

Mục đích của dấu ngoặc đơn ở đây là gì? –

+5

@WakanTanka Buộc các echos và ngủ để chạy trong một sub-shell, chia sẻ một stdout và thực sự có giấc ngủ tạm dừng đầu ra trước khi lệnh "quit" được lặp lại, để cho phép bảng định tuyến đầy đủ để in, trước khi kết nối chết. – Vatine

+0

nhờ @Vatine ví dụ đơn giản tốt, đã làm việc cho tôi. – MikeRoger

12

Phương pháp khác là sử dụng netcat (hoặc nc, phụ thuộc vào posix) trong cùng định dạng như hiển thị vatine hoặc bạn có thể tạo tệp văn bản chứa mỗi lệnh trên dòng riêng của nó.

Tôi đã phát hiện ra rằng telnets một số posix' không xử lý chuyển hướng một cách chính xác (đó là lý do tôi đề nghị netcat)

+0

Câu trả lời xuất sắc, telnet không hoạt động nhưng chuyển nó qua nc thay vì làm việc. – I82Much

+5

Thôi nào mọi người, khi bạn downvote, cho tôi biết lý do tại sao (đặc biệt là nhiều năm sau khi thực tế) – KevinDTimm

+0

Câu trả lời của bạn có thể đơn giản là một bình luận trong câu trả lời của Vatine. Hoặc chỉnh sửa cho anh ấy. Không cần phải đăng câu trả lời hoàn toàn mới khi bạn đề cập đến "cùng một định dạng như hiển thị vatine". Trong SO, nhận được câu trả lời tốt nhất là tốt hơn là có rất nhiều câu trả lời qua tham chiếu lẫn nhau, hoặc vì vậy tôi tin. BTW, tôi đã không downvote. – artfuldev

-1

Mặc dù không trực tiếp liên quan đến câu hỏi của bạn, tôi sẽ khuyên bạn nên sử dụng ssh thay vào đó, như bạn có thể thực hiện cụ thể lệnh thông qua nó (cộng với nó an toàn hơn theo mặc định).

0

Vài câu hỏi:

  1. Bạn có thể đặt những thứ trên thiết bị mà bạn đang telnet vào?
  2. Các lệnh có được thực thi bởi tập lệnh giống nhau hay chúng khác nhau tùy theo máy/người dùng?
  3. Bạn có muốn người nhấp vào biểu tượng phải cung cấp userid và/hoặc mật khẩu không?

Điều đó nói rằng, trước đây tôi đã viết một số Java để nói chuyện với một vài dải nguồn hỗ trợ IP (BayTech RPC3s) có thể được sử dụng cho bạn. Nếu bạn quan tâm tôi sẽ thấy nếu tôi có thể đào nó lên và gửi nó một nơi nào đó.

3

Kiểm tra SendCommand tool.

Bạn có thể sử dụng nó như sau:

perl sendcommand.pl -i login.txt -t cisco -c "show ip route" 
3

Nó có thể không nghe một ý tưởng tốt, nhưng tôi sử dụng java và sử dụng lập trình socket TCP/IP đơn giản để kết nối với một máy chủ telnet và trao đổi thông tin liên lạc. AND nó hoạt động hoàn hảo nếu bạn biết giao thức được thực hiện. Đối với SSH vv, nó có thể là khó khăn, trừ khi bạn biết làm thế nào để làm bắt tay vv, nhưng telnet đơn giản hoạt động như một điều trị. Một cách khác tôi đã thử, đã được sử dụng quá trình bên ngoài trong java System.exec() vv, và sau đó để cho các cửa sổ được xây dựng trong telnet làm công việc cho bạn và bạn chỉ cần gửi và nhận dữ liệu cho quá trình hệ thống địa phương.

7

Tập lệnh vbs này tải lại công tắc cisco, đảm bảo telnet được cài đặt trên cửa sổ.

Option explicit 
Dim oShell 
set oShell= Wscript.CreateObject("WScript.Shell") 
oShell.Run "telnet" 
WScript.Sleep 1000 
oShell.Sendkeys "open 172.25.15.9~" 
WScript.Sleep 1000 
oShell.Sendkeys "password~" 
WScript.Sleep 1000 
oShell.Sendkeys "en~" 
WScript.Sleep 1000 
oShell.Sendkeys "password~" 
WScript.Sleep 1000 
oShell.Sendkeys "reload~" 
WScript.Sleep 1000 
oShell.Sendkeys "~" 
Wscript.Quit 
-1

Viết phiên telnet bên trong tệp BAT Dos và thực thi.

+2

Bạn không thể kiểm soát/tập lệnh phiên FTP từ bên trong một tệp BATch, bạn chỉ có thể bắt đầu phiên FTP. Để kịch bản một phiên FTP bạn phải sử dụng lệnh script '-s: filename.txt' để xác định một tệp văn bản có chứa tập lệnh của bạn. –

+0

FTP? Tôi tin rằng câu hỏi là về phiên TELNET – Sara

0

Tôi thích ví dụ do Trạng thái hoạt động sử dụng python. Đây là toàn bộ link. Tôi đã thêm phần đăng nhập đơn giản một phần từ liên kết nhưng bạn có thể nắm được ý chính của những gì bạn có thể làm.

import telnetlib 

prdLogBox='142.178.1.3' 
uid = 'uid' 
pwd = 'yourpassword' 

tn = telnetlib.Telnet(prdLogBox) 
tn.read_until("login: ") 
tn.write(uid + "\n") 
tn.read_until("Password:") 
tn.write(pwd + "\n") 
tn.write("exit\n") 
tn.close() 
2
import telnetlib 

user = "admin" 
password = "\r" 

def connect(A): 
    tnA = telnetlib.Telnet(A) 
    tnA.read_until('username: ', 3) 
    tnA.write(user + '\n') 
    tnA.read_until('password: ', 3) 
    tnA.write(password + '\n') 
    return tnA 
def quit_telnet(tn) 
    tn.write("bye\n") 
    tn.write("quit\n") 
1

Bash shell hỗ trợ out-of-ô này, ví dụ

exec {stream}<>/dev/tcp/example.com/80 
printf "GET/HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream} 
cat <&${stream} 

Để lọc và chỉ hiển thị một số dòng, chạy: grep Example <&${stream}.

Các vấn đề liên quan