Поиск по блогу

четверг, 2 октября 2014 г.

Посмотрел видео о взаимодействии telnetlib с netcat и нашел Python Sock сервер для тестов... и настроил под него Putty

Чтобы попрактиковаться с telnet+lib можно использовать netcat (sudo nc host port), в видео для этого открыты две консоли, и обмен строками текста впечатляет..., но искать вариант netcat (без вирусов) для windows лень. Проще написать sock сервер на Python. Здесь все ссылки для этого и готовый код. И справка по опциям netcat (ее надо поюзать в Kali)... И первые результатыэкспериментов с Putty и telnetlib

Сначала небольшое отступление в Linux

Все тесты на машине с Kali проходят без сучка и задоринки, именно так, как в видео. Так зачем же я мучаюсь с Windows? Это обычная гордыня. Мне нужно за что-то себя уважать. Вот я и стараюсь разобраться с тем, ... с чем можно не разбираться... ведь обходной путь уже найден...
В дистрибутиве Kali есть и Telnet NetCat. Telnet работает безо всяких крякозябов и именно так, как и в роликах. А возможность режима "прослушивания" настолько восхитила, что я, пожалуй потрачу день на изучение NetCat и SoCat и напишу пост из Kali-компьютера (для этого мне надо закончить этот и переставить флешку на тот другой компьютер).

Возвращаясь к Windows ...краткое содержание этого поста.

Понял, что пришла пора создать полноценную домашнюю сеть, дабы поэксперимнтировать с сокетами и прочими прибамбасами...
Я всегда откладывал этот рутинный процесс... Вот и сечас не хочется тратить время на ИЗУЧЕНИЕ этого...

А здесь надо было найти какой-то сервер для тестирования переговоров в Windows... я не удержался и стырил написал код Python сервера, который печатает все, что на него приходит, сначала от Python клиента, а потом от Putty. Так я пытался научится настраивать Putty. Методом продвинутого тыка (с чтением мануала) нашел две настройки (увековечил свои находки в картинках)... Но далее не выдержал, плюнул на это дело, скопировал сюда настройки Putty из реестра... и пошел юзать Linux.

Добавлено: 13 окт. 2010 г. http://FilmsByKris.com Got Questions? visit http://FilmsByKris.com/forum Chat with us and learn more http://FilmsByKris.com/irc


Весь код от автора
NetCat со справочником опций
Как использовать Netcat

Начинался этот пост вот с этого, я подыскивал вариант переключения Tor Instance
Creating a script for a Telnet session?

Клиент <-> Сервер (Python)
17.2. socket — Low-level networking interface

PuTTY: делаем Windows полезным

Файлы из видеоролика оказались очень полезными (связка сервер-клиент) для экспериментов в Windows, потому запомним, что я сложил их на флешку вот сюда

In [13]:
!dir "E:\w8\IPython Notebooks\2014_10\sock_server"
 Volume in drive E is SL-63-X86_6
 Volume Serial Number is 2E3A-7167

 Directory of E:\w8\IPython Notebooks\2014_10\sock_server

02.10.2014  14:29    <DIR>          .
02.10.2014  14:29    <DIR>          ..
02.10.2014  15:04               445 server1.py
02.10.2014  14:32               335 client1.py
02.10.2014  14:39               773 server1_threads.py
03.10.2014  14:20            13В 820 44444.reg
               4 File(s)         15В 373 bytes
               2 Dir(s)     341В 696В 512 bytes free

Помимо первого варианта сервер-клиент здесь еще многопоточный сервер и настройки putty из реестра w8 (они скопированы в конец этого поста)

Код из видеоролика

1.Создаем файл mytelnet.py

In []:
#!/usr/bin/python
 
import telnetlib
 
HOST = "localhost"
tn = telnetlib.Telnet(HOST, "4444")
 
tn.write("Hello I`m Telnetlib\n")
print tn.read_all()

Последняя строчка - это команда на чтение. В видео автор запустил в второй консоли netcat -l и сначала прочитал "Hello World", а потом начал печатать в netcat строчки... и они транслмровались в окно консоли с telnetlib

2.Запускаем netcat (с правами администратора) из второй консоли

In []:
$ sudo netcat -l 999 # listen port 999
  1. Запускаем mytelnet.py из первой консоли и читаем во второй "Hello World"... Потом во второй набираем строки, которые тут же появляются в первой....
In []:
В простом случае NetCat вызывается как:

nc host port
Это приводит к созданию TCP-подключения с указанными реквизитами и замыканием стандартного ввода на сетевой вывод и наоборот, 
стандартного вывода на сетевой ввод. Такая функциональность напоминает команду cat, что обусловило выбор имени «netcat». 
При невозможности подключения программа выводит сообщение об ошибке на stderr.

Утилита распознаёт следующие ключи:

 -h Справка; ничего не делается
 -v Дополнительная диагностика (verbose)
 -o выходной_файл Выводить дампы данных
 -i число Задержка между отправляемыми данными (в секундах)
 -t Совместимость с Telnet
 -z Не посылать данные (сканирование портов)
 -u Подключаться по UDP (вместо TCP)
 -l Пассивный режим (прослушивание порта)
 -p число * Локальный номер порта (для -l)
 -s host Использовать заданный локальный («свой») IP-адрес
 -n Отключить DNS и поиск номеров портов по /etc/services
 -w число Задать тайм-аут (в секундах)
 -q число Задать время ожидания после EOF на входе (в секундах) **
 -e исполняемый_файл ! Запустить указанную программу для обмена данных с сетью (вместо стандартных ввода и вывода)
 -с команда ! То же, в виде команды для /bin/sh
! — требуется специальная сборка, в поставляемых исполняемых файлах отключено (легко создаёт сетевую уязвимость).
*  в некоторых реализациях номер порта для прослушивания задаётся через -l, а ключ -p отсутствует.
**  имеется не во всех версиях.

Пример с пояснениями на русском здесь Клиент <-> Сервер (Python)

Код из этой статьи можно использовать, там еще есть многопоточный сервер. Вместе с примерами из документации 17.2. socket — Low-level networking interface это отличный задел для собственного сервера. Потому я скопировал файлы из статьи вот сюда:

Но прежде, чем начнем экспериментировать, одно важное замечание. В комментариях к статье есть несколько замечаний по поводу кода (ниже), пока мне не до них, но стоит запомнить, что там есть замечания о том, что этот сервер "грузит" систему...

In []:
%load "E:\\w8\\IPython Notebooks\\2014_10\\sock_server\\server1.py"
In []:
#!/usr/bin/env python
 
import socket
 
host = "localhost"
port = 44444
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(5)
sock, addr = s.accept()
while True:
    buf = sock.recv(1024)
    if buf == "exit":
        sock.send("bye")
        break
    elif buf:
        sock.send(buf)
    print buf # To view what exactly server resiev
sock.close()

Окказалось, что для экспериментов это именно то, что надо. Я вставил всего одну строчку print buf, чтобы видеть, что приходит на сервер от клиента.

In [4]:
%load "E:\\w8\\IPython Notebooks\\2014_10\\sock_server\\client1.py"
In []:
#!/usr/bin/env python
 
import socket
 
host = "localhost"
port = 44444
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
    buf = raw_input(">>")
    s.send(buf)
    result = s.recv(1024)
    print result
    if buf == "exit":
        break
s.close()

Эта связка клиент-сервер прекрасно работает у меня на w8. Даже кириллицу показывает. Я запустил два файла из разных окон консоли и наблюдал, как сервер повторяет и отправляет назад "фыва"... Море удовольствия.

In []:
# server
E:\w8\IPython Notebooks\2014_10>python sock_server/server1.py
фыва
In []:
#client
E:\w8\IPython Notebooks\2014_10>python sock_server/client1.py
>>фыва
фыва
>>exit
bye

После того, как я перегрузил сервер и попробовал подключится к нему с Pytty

Выяснилось, что после подключения к серверу localhost 44444 открывается окно консоли из которого каждая буква передается на сервер, чтобы включить режим ввода строк надо поменять настройки "Local echo" и "Local line editing". Все заработало при таких настройках:

In [5]:
from IPython.display import Image
In [7]:
Image (filename="C:\\Users\\kiss\\Pictures\\pythonR\\putty1.png")
Out[7]:
In []:
# Команды в консоле Putty
# Чтобы скопировать текст из консоли достаточно просто его выделить !!!
qwerty
йцукен
йцукен
# Вставка содержимого буфера обмена в окно PuTTY происходит обычным кликом правой кнопкой мыши, либо при нажатии «Shift+Ins»
In []:
E:\w8\IPython Notebooks\2014_10>python sock_server/server1.py
 √▼ √  √↑ √' ¤☺ √♥ ¤♥
 ■▼ ■  ■↑ ■' №☺
 √$
 ■$
qwerty

╨╣╤Ж╤Г╨║╨╡╨╜

Первые крякозябы выскакивают при подключении к серверу, но потом строки передаются после нажатия "Enter", кириллица не передается...

Чтобы убрать крякозябы, надо поменять кодовую страницу на CP866 (ввести текст вручную, как рекомендовано под Remote character set)

В коде сервера задана кодировка utf-8, и в коде клиента ... так же. но вызываю я их из консоли cmd, а здесь кодировка:

In [10]:
!chcp 65001
Active code page: 65001

Можно было бы попробовать изменить кодировки во всех консолях, но решил найти, можно ли это сделать в Putty, и нашел:

In [9]:
!chcp
’ҐЄгй п Є®¤®ў п бва ­Ёж : 866

In [8]:
Image (filename="C:\\Users\\kiss\\Pictures\\pythonR\\putty2.png")
Out[8]:

Перезапустил сервер и подключился к нему с новой кодировкой... крякорзябы остались... Ну и вроде бы, ничего страшного, полагаю, по умолчанию putty проводит переговоры с сервером в "правильной кодировке".

In []:
E:\w8\IPython Notebooks\2014_10>python sock_server/server1.py
 √▼ √  √↑ √' ¤☺ √♥ ¤♥
 ■▼ ■  ■↑ ■' №☺
 √$
 ■$
In []:

В Windows, PuTTY хранит большую часть данных (сохранённые сеансы, серверные SSH ключи) в системном реестре. Точное расположение:

In []:
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY
In [12]:
# Я попытался скопировать и загрузить сюда
%load "E:\\w8\\IPython Notebooks\\2014_10\\sock_server\\44444.reg"
# Но пришлось скопипастить через Notepad++ ...снова из-за форматирования
In []:
 Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\44444]
"Present"=dword:00000001
"HostName"="localhost"
"LogFileName"="putty.log"
"LogType"=dword:00000000
"LogFileClash"=dword:ffffffff
"LogFlush"=dword:00000001
"SSHLogOmitPasswords"=dword:00000001
"SSHLogOmitData"=dword:00000000
"Protocol"="telnet"
"PortNumber"=dword:0000ad9c
"CloseOnExit"=dword:00000001
"WarnOnClose"=dword:00000001
"PingInterval"=dword:00000000
"PingIntervalSecs"=dword:00000000
"TCPNoDelay"=dword:00000001
"TCPKeepalives"=dword:00000000
"TerminalType"="xterm"
"TerminalSpeed"="38400,38400"
"TerminalModes"="CS7=A,CS8=A,DISCARD=A,DSUSP=A,ECHO=A,ECHOCTL=A,ECHOE=A,ECHOK=A,ECHOKE=A,ECHONL=A,EOF=A,EOL=A,EOL2=A,ERASE=A,FLUSH=A,ICANON=A,ICRNL=A,IEXTEN=A,IGNCR=A,IGNPAR=A,IMAXBEL=A,INLCR=A,INPCK=A,INTR=A,ISIG=A,ISTRIP=A,IUCLC=A,IXANY=A,IXOFF=A,IXON=A,KILL=A,LNEXT=A,NOFLSH=A,OCRNL=A,OLCUC=A,ONLCR=A,ONLRET=A,ONOCR=A,OPOST=A,PARENB=A,PARMRK=A,PARODD=A,PENDIN=A,QUIT=A,REPRINT=A,START=A,STATUS=A,STOP=A,SUSP=A,SWTCH=A,TOSTOP=A,WERASE=A,XCASE=A"
"AddressFamily"=dword:00000000
"ProxyExcludeList"=""
"ProxyDNS"=dword:00000001
"ProxyLocalhost"=dword:00000000
"ProxyMethod"=dword:00000000
"ProxyHost"="proxy"
"ProxyPort"=dword:00000050
"ProxyUsername"=""
"ProxyPassword"=""
"ProxyTelnetCommand"="connect %host %port\\n"
"Environment"=""
"UserName"=""
"UserNameFromEnvironment"=dword:00000000
"LocalUserName"=""
"NoPTY"=dword:00000000
"Compression"=dword:00000000
"TryAgent"=dword:00000001
"AgentFwd"=dword:00000000
"GssapiFwd"=dword:00000000
"ChangeUsername"=dword:00000000
"Cipher"="aes,blowfish,3des,WARN,arcfour,des"
"KEX"="dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,rsa,WARN"
"RekeyTime"=dword:0000003c
"RekeyBytes"="1G"
"SshNoAuth"=dword:00000000
"SshBanner"=dword:00000001
"AuthTIS"=dword:00000000
"AuthKI"=dword:00000001
"AuthGSSAPI"=dword:00000001
"GSSLibs"="gssapi32,sspi,custom"
"GSSCustom"=""
"SshNoShell"=dword:00000000
"SshProt"=dword:00000002
"LogHost"=""
"SSH2DES"=dword:00000000
"PublicKeyFile"=""
"RemoteCommand"=""
"RFCEnviron"=dword:00000000
"PassiveTelnet"=dword:00000000
"BackspaceIsDelete"=dword:00000001
"RXVTHomeEnd"=dword:00000000
"LinuxFunctionKeys"=dword:00000000
"NoApplicationKeys"=dword:00000000
"NoApplicationCursors"=dword:00000000
"NoMouseReporting"=dword:00000000
"NoRemoteResize"=dword:00000000
"NoAltScreen"=dword:00000000
"NoRemoteWinTitle"=dword:00000000
"RemoteQTitleAction"=dword:00000001
"NoDBackspace"=dword:00000000
"NoRemoteCharset"=dword:00000000
"ApplicationCursorKeys"=dword:00000000
"ApplicationKeypad"=dword:00000000
"NetHackKeypad"=dword:00000000
"AltF4"=dword:00000001
"AltSpace"=dword:00000000
"AltOnly"=dword:00000000
"ComposeKey"=dword:00000000
"CtrlAltKeys"=dword:00000001
"TelnetKey"=dword:00000000
"TelnetRet"=dword:00000000
"LocalEcho"=dword:00000000
"LocalEdit"=dword:00000000
"Answerback"="PuTTY"
"AlwaysOnTop"=dword:00000000
"FullScreenOnAltEnter"=dword:00000000
"HideMousePtr"=dword:00000000
"SunkenEdge"=dword:00000000
"WindowBorder"=dword:00000001
"CurType"=dword:00000000
"BlinkCur"=dword:00000000
"Beep"=dword:00000001
"BeepInd"=dword:00000000
"BellWaveFile"=""
"BellOverload"=dword:00000001
"BellOverloadN"=dword:00000005
"BellOverloadT"=dword:000007d0
"BellOverloadS"=dword:00001388
"ScrollbackLines"=dword:000007d0
"DECOriginMode"=dword:00000000
"AutoWrapMode"=dword:00000001
"LFImpliesCR"=dword:00000000
"CRImpliesLF"=dword:00000000
"DisableArabicShaping"=dword:00000000
"DisableBidi"=dword:00000000
"WinNameAlways"=dword:00000001
"WinTitle"=""
"TermWidth"=dword:00000050
"TermHeight"=dword:00000018
"Font"="Courier New"
"FontIsBold"=dword:00000000
"FontCharSet"=dword:00000000
"FontHeight"=dword:0000000a
"FontQuality"=dword:00000000
"FontVTMode"=dword:00000004
"UseSystemColours"=dword:00000000
"TryPalette"=dword:00000000
"ANSIColour"=dword:00000001
"Xterm256Colour"=dword:00000001
"BoldAsColour"=dword:00000000
"Colour0"="187,187,187"
"Colour1"="255,255,255"
"Colour2"="0,0,0"
"Colour3"="85,85,85"
"Colour4"="0,0,0"
"Colour5"="0,255,0"
"Colour6"="0,0,0"
"Colour7"="85,85,85"
"Colour8"="187,0,0"
"Colour9"="255,85,85"
"Colour10"="0,187,0"
"Colour11"="85,255,85"
"Colour12"="187,187,0"
"Colour13"="255,255,85"
"Colour14"="0,0,187"
"Colour15"="85,85,255"
"Colour16"="187,0,187"
"Colour17"="255,85,255"
"Colour18"="0,187,187"
"Colour19"="85,255,255"
"Colour20"="187,187,187"
"Colour21"="255,255,255"
"RawCNP"=dword:00000000
"PasteRTF"=dword:00000000
"MouseIsXterm"=dword:00000000
"RectSelect"=dword:00000000
"MouseOverride"=dword:00000001
"Wordness0"="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
"Wordness32"="0,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1"
"Wordness64"="1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2"
"Wordness96"="1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1"
"Wordness128"="1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
"Wordness160"="1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
"Wordness192"="2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2"
"Wordness224"="2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2"
"LineCodePage"="CP866"
"CJKAmbigWide"=dword:00000000
"UTF8Override"=dword:00000001
"Printer"=""
"CapsLockCyr"=dword:00000000
"ScrollBar"=dword:00000001
"ScrollBarFullScreen"=dword:00000000
"ScrollOnKey"=dword:00000000
"ScrollOnDisp"=dword:00000001
"EraseToScrollback"=dword:00000001
"LockSize"=dword:00000000
"BCE"=dword:00000001
"BlinkText"=dword:00000000
"X11Forward"=dword:00000000
"X11Display"=""
"X11AuthType"=dword:00000001
"X11AuthFile"=""
"LocalPortAcceptAll"=dword:00000000
"RemotePortAcceptAll"=dword:00000000
"PortForwardings"=""
"BugIgnore1"=dword:00000000
"BugPlainPW1"=dword:00000000
"BugRSA1"=dword:00000000
"BugIgnore2"=dword:00000000
"BugHMAC2"=dword:00000000
"BugDeriveKey2"=dword:00000000
"BugRSAPad2"=dword:00000000
"BugPKSessID2"=dword:00000000
"BugRekey2"=dword:00000000
"BugMaxPkt2"=dword:00000000
"BugWinadj"=dword:00000000
"StampUtmp"=dword:00000001
"LoginShell"=dword:00000001
"ScrollbarOnLeft"=dword:00000000
"BoldFont"=""
"BoldFontIsBold"=dword:00000000
"BoldFontCharSet"=dword:00000000
"BoldFontHeight"=dword:00000000
"WideFont"=""
"WideFontIsBold"=dword:00000000
"WideFontCharSet"=dword:00000000
"WideFontHeight"=dword:00000000
"WideBoldFont"=""
"WideBoldFontIsBold"=dword:00000000
"WideBoldFontCharSet"=dword:00000000
"WideBoldFontHeight"=dword:00000000
"ShadowBold"=dword:00000000
"ShadowBoldOffset"=dword:00000001
"SerialLine"="COM1"
"SerialSpeed"=dword:00002580
"SerialDataBits"=dword:00000008
"SerialStopHalfbits"=dword:00000002
"SerialParity"=dword:00000000
"SerialFlowControl"=dword:00000001
"WindowClass"=""


Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий