Тупая проблема с Telnet в windows. Соединение закрывается. Тупая потому, что надо найти где и на что нажимать. Консоль просто подвисает... Здесь штук 20 ссылок - процесс поиска решения... Но вот я догадался попробовать telnet в Linux... и все заработало. Зачем вообще разбираться с тем, как при помощи Telnet имитировать заголовки и запросы браузера? Пожалуй только потому, что Python позволяет читать ответы и программировать разные варианты переговоров. В конце поста примеры с telnetlib и многочисленные ссылки, например, есть упоминание "...Another method is to use netcat" .
Мне еще предстоит принять решение, что и для чего лучше использовать. Пока задача мне видится такой: "Как притворяться браузером" и настраивать заголовки для пауков. Для этой цели лучше подходит scrapy shell. А вот когда мне понадобится анализировать заголовки ответов, потом настраивать работу паука в зависимости от ответа сервера..., здесь то и понадобится telnetlib. Полагаю, что для начала нужно было просто поюзать telnet..., но из-за проблем с windows пришлось сразу ""лезть вглубь"... В этом посте я постарался сохранить все ссылки, которые мне поались...
Эмуляция браузера через telnet
HOW TO: Request a Web Page Through a Telnet Client
Creating a script for a Telnet session?
Multiple simultaneous network connections - Telnet server, Python
Connecting to smtp.gmail.com via command line
Windows 7: Connection failed!
Windows 7: Connection failed!
Windows: Using PuTTY as a Telnet client
Python telnetlib to connect to Scrapy Telnet to read stats
Tutorial for telnet
Telnet - Not able to connect on a port
Telnet public IP not working, but from remote , and other computers in local network work just fine
Telnet connection failed in command prompt? need help...?
How to fix Telnet errors on Windows 7 or Windows server 2008
Microsoft Network Monitor 3.4
Telnet commands
[Telnet Tools and Settings](http://technet.microsoft.com/ru-RU/library/cc787407.aspx
Учимся использовать Telnet
Команды Telnet
HOW TO: Request a Web Page Through a Telnet Client
Creating a script for a Telnet session?
Multiple simultaneous network connections - Telnet server, Python
Connecting to smtp.gmail.com via command line
Windows 7: Connection failed!
Windows 7: Connection failed!
Windows: Using PuTTY as a Telnet client
Python telnetlib to connect to Scrapy Telnet to read stats
Tutorial for telnet
Telnet - Not able to connect on a port
Telnet public IP not working, but from remote , and other computers in local network work just fine
Telnet connection failed in command prompt? need help...?
How to fix Telnet errors on Windows 7 or Windows server 2008
Microsoft Network Monitor 3.4
Telnet commands
[Telnet Tools and Settings](http://technet.microsoft.com/ru-RU/library/cc787407.aspx
Учимся использовать Telnet
Команды Telnet
In []:
I've come up with a solution myself:
1) Type in: telent www.example.com 80 (as it is a connection to server)
2) Now you can see a blank screen of terminal. Don't worry! It's just a way Windows behaves
when you want to do something more than playing a computer game.
3) Type in: GET / HTTP/1.0 [press ENTER]
4) Type in: Host: www.example.com [press ENTER]
5) [press ENTER] to confirm
6) Now the requested data is displayed. That's it ;)
Нашел рекомендации от Microsoft HOW TO: Request a Web Page Through a Telnet Client¶
In []:
By default, the telnet client that is included with Microsoft Windows does not have the Local Echo option enabled,
so the second command does not appear to be received by the server, although it is. To enable Local Echo,
use one of the following methods after the first command:
Microsoft Windows 95, Microsoft Windows 98, Microsoft Windows Millennium Edition (Me), or Microsoft Windows NT 4.0
On the Terminal menu, click Preferences.
Click to select the Local Echo check box.
Microsoft Windows 2000 and Microsoft Windows XP
Click Start, click Run, and then type telnet.exe to start the telnet program.
Type the following command:For Windows 2000:
set local_echo
For Windows XP:
set localecho
Press the ENTER key one time on a blank line to quit the configuration and return to the telnet session.
Some telnet clients send only the carriage return (CR) character when you press ENTER or RETURN. If you are trying to connect
from one of these clients, you must use a control-key combination to send the CRLF characters. In the Windows environment,
hold down the ALT key, and then type the key sequence that corresponds to the appropriate character on the numeric keypad.
To view the characters and corresponding numbers, see the following Microsoft Developer Network (MSDN) Web sites:
Character Set 0-127
http://msdn.microsoft.com/en-us/library/6hy0yb50(VS.85).aspx
А не попробовать ли для начала поработать в Linux?¶
In []:
telnet> open ya.ru
Trying 213.180.193.3...
Trying 2a02:6b8::3...
telnet: Unable to connect to remote host: Network is unreachable
telnet> open ya.ru 80
Trying 213.180.193.3...
Connected to ya.ru.
Escape character is '^]'.
Get Connection closed by foreign host.
kiss@kali:~$ GET /index.html HTTP/1.0
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!-- turing_cluster_prod -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>http.com</title>
<meta name="keywords" content="http.com" />
<meta name="description" content="http.com" />
<meta name="robots" content="index, follow" />
<meta name="revisit-after" content="10" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="text/javascript">
document.cookie = "jsc=1";
</script>
</head>
<frameset rows="100%,*" frameborder="no" border="0" framespacing="0">
<frame src="http://www.HTTP.com?epl=VwHmQU9sK9-sduiQfqvy02RfKxRDQuEUyV3805EfZ0UNwsssQfILkcdjc2MU03jRgFjXAeR1Zl8XO_asUKUgNEIhCh2BexRsvMphTSPUQ1g1JxNZVYl4EnTquk3FDlMWmeBRt7MUdQjRQEMMDRo1U21qQG2ahgyZpqknbepRDXUAIJDe778AAEB_AQAAQIBbCwAA2dcKxVlTJllBMTZoWkKNAAAA8A" name="http.com">
</frameset>
<noframes>
<body><a href="http://www.HTTP.com?epl=VwHmQU9sK9-sduiQfqvy02RfKxRDQuEUyV3805EfZ0UNwsssQfILkcdjc2MU03jRgFjXAeR1Zl8XO_asUKUgNEIhCh2BexRsvMphTSPUQ1g1JxNZVYl4EnTquk3FDlMWmeBRt7MUdQjRQEMMDRo1U21qQG2ahgyZpqknbepRDXUAIJDe778AAEB_AQAAQIBbCwAA2dcKxVlTJllBMTZoWkKNAAAA8A">Click here to go to http.com</a>.</body>
</noframes>
</html>kiss@kali:~$ status
Что это за ссылка в тексте?
Это не от того ли, что я задал древний протокол GET /index.html HTTP/1.0 подробности здесь: Эмуляция браузера через telnet, попробуем более современный вариант
In []:
kiss@kali:~$ telnet ya.ru 80
Trying 213.180.204.3...
Connected to ya.ru.
Escape character is '^]'.
GET /index.html HTTP/1.1
HTTP/1.1 400 Bad Request
Server: nginx
Date: Tue, 19 Aug 2014 11:39:23 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 166
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
Connection closed by foreign host.
In []:
Все равно, серверу не нравится... Надо бы маскироваться под браузер и отправлять пачки заголовков.
Как автоматизировать работу с сервером ... Creating a script for a Telnet session?¶
In []:
I've used various methods for scripting telnet sessions under unix, but the simplest one is probably a sequence of
echo and sleep commands, with their output piped into telnet.
Piping the output into another command is also a possibility.
Silly example
(echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter
This (basicallly) retrieves the routing table of a Cisco router.
Далее фрагменты кода, из этого длинного обсуждения, из которых ясно, что можно просто заранее написать строки для telnet
In []:
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")
In []:
#I like the example given by Active State using python. Here is the full link.
#I added the simple log in part from the link but you can get the gist of what you could do.
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()
Более подробно отсюда Automate performance monitoring via telnet and ftp in a production environment Python recipe¶
In []:
#his code snippet shows how to kich off a performance data gathering shell script with telnetlib and download
#the data back to a local workstation with ftplib.
#automate a log grabber script with telnetlib and ftplib
# LOG_GRABBER is a shell script which will grab the logs from the production logs.
# It may invoke other shell script, perl, shell, python etc to get its job done.
# A generic example: getAccountBalance, 500
# this means getAccountBalance function takes about 500 ms to finish.
# its end result is saved in LOG_OUT in any format you may import later for analysis.
import telnetlib
from ftplib import FTP
# full path to them
LOG_GRABBER='/users/perfmon/grabLogs.sh'
LOG_OUT='logstats.txt'
prdLogBox='142.178.1.3'
uid = 'uid'
pwd = 'yourpassword'
# kick off the log grabber via telnet
tn = telnetlib.Telnet(prdLogBox)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd + "\n")
tn.write(LOG_GRABBER+"\n")
tn.write("exit\n")
tn.close()
# download the timing statistics to local via FTP
ftp=FTP(prdLogBox)
ftp.login(uid,pwd)
#ftp.set_debuglevel(2)
logOut=open(LOG_OUT,'wb+')
ftp.retrbinary('RETR '+LOG_OUT, logOut.write)
ftp.quit()
logOut.close()
This recipe is used for performance monitoring in real procution environment. It is non-intrusive as the timing log (LOG4J actually) has been produced daily and copy to a differnt server during the non-rush hour.
Gather timing statistics in log daily from a production environment during the non rush hour, then download the results, put the results into a RDBMS, calculate the statistics such as min,max,avg,median, deviation.
Gather timing statistics in log daily from a production environment during the non rush hour, then download the results, put the results into a RDBMS, calculate the statistics such as min,max,avg,median, deviation.
Вопросы о том, на какие кнопки нажимать, так и остались нерешенными¶
Итак, в Kali все работает, а в Windows все подвисает. Надо бы не забыть написать комментарий к этому посту с рецептами подключения telnetlib в windows... но пока нам вполне хватит возможностей Linux дистрибутива.
Текстовый браузер netcat - альтернатива telnet¶
In []:
kiss@kali:~$ netcat -h
Usage:
netcat [options...] hostname port
netcat -l -p port [-s addr] [options...] [hostname] [port]
Recognized options are:
-4 Use only IPv4
-6 Use only IPv6
-b, --bluetooth Use Bluetooth (defaults to L2CAP protocol)
--buffer-size=BYTES Set buffer size
--continuous Continuously accept connections
(only in listen mode with --exec)
--disable-nagle Disable nagle algorithm for TCP connections
-e, --exec=CMD Exec command after connect
--half-close Handle network half-closes correctly
-h, --help Display help
-l, --listen Listen mode, for inbound connects
--mtu=BYTES Set MTU for network connection transmits
-n Numeric-only IP addresses, no DNS
--no-reuseaddr Disable SO_REUSEADDR socket option
(only in listen mode)
--nru=BYTES Set NRU for network connection receives
-p, --port=PORT Local port
-q, --hold-timeout=SEC1[:SEC2]
Set hold timeout(s) for local [and remote]
--rcvbuf-size Kernel receive buffer size for network sockets
--recv-only Only receive data, don't transmit
-s, --address=ADDRESS Local source address
--sco Use SCO over Bluetooth
--send-only Only transmit data, don't receive
--sndbuf-size Kernel send buffer size for network sockets
-t, --idle-timeout=SECONDS
Idle connection timeout
-u, --udp Require use of UDP
-v Increase program verbosity
(call twice for max verbosity)
--version Display nc6 version information
-w, --timeout=SECONDS Timeout for connects/accepts
-x, --transfer File transfer mode
-X, --rev-transfer File transfer mode (reverse direction)
-T, --ttl=TTL TTL of outgoing IP packet
-z Don't send any data (scan mode)
Посты чуть ниже также могут вас заинтересовать
Putty нужно будет практиковать в любом случае, надо бы локальные подключения попробовать... Пока ясно, что telnet под windows - это засада.
ОтветитьУдалитьhttp://www.chiark.greenend.org.uk/~sgtatham/putty/
Я не определился с тем, какой инструмент мне использовать для экспериментов с подключениями к сайтам... и сервисам.
Наверное идеальный вариант - это сниффер, который пишет все мои переговоры. Но они громоздкие все, однако (это раз), потом, если я ушел в туннель, то фиг он чё напишет...
Стрелять из пушки по воробьям..., когда надо будет быстро проверить какую-нибудь мааааленькую идейку...
Надо бы не забыть еще и про
http://www.chiark.greenend.org.uk/~sgtatham/putty/