Http через телнет с питоном и витой - PullRequest
6 голосов
/ 09 сентября 2011

Вот что я хочу сделать:

веб-браузер -> подключиться к удаленному серверу через telnet (server1) -> к squid-proxy (который требует аутентификацию) через telnet через порт 80 (server2)

Я написал небольшой скрипт на Python, использующий Twisted (здесь:

#! /usr/bin/python
from twisted.internet import reactor, protocol
from twisted.web import http
from telnetlib import Telnet
import getpass
from sys import stdout

class datareceiver(protocol.Protocol):
    def dataReceived(self,data):
        self.telnet_con.write(data)
        stdout.write( self.telnet_con.read_all() )

    def connectionMade(data):
        stdout.write("\nA connection was made to this server\n")

def main():
    server1 = "10.1.1.1"
    #user = raw_input("Enter your remote account: ")
    password = getpass.getpass()
    tn = Telnet(server1)

    if password:
        tn.read_until("Password: ")
        tn.write(password + "\n")

    #This is server2
    tn.write("telnet 10.1.1.10 80 \n")


    #serverfac = protocol.Factory()
    serverfac = http.HTTPFactory()
    datareceiver.telnet_con = tn
    serverfac.protocol = datareceiver
    reactor.listenTCP(9229,serverfac)

    reactor.run()
    tn.write("exit\n")

    print tn.read_all()

if __name__ == "__main__":
    main()

Но потом я понял, что делаю это неправильно, моя оболочка получает все ответыиз squid вместо браузера. Может кто-то просто наметить правильный способ сделать это? Должен ли я использовать что-то другое вместо витой?

1 Ответ

1 голос
/ 07 октября 2011

Я думаю, вы хотите посмотреть на twisted.web.server.Site и twisted.web.resource.Resource . Кроме того, поскольку вы используете Twisted, вы, вероятно, захотите использовать twisted.protocols.telnet.Telnet для подключения через telnet, иначе ваше приложение не будет асинхронным.

Этот пост и этот ответ здесь также может быть полезен.

Надеюсь, это поможет!

...