[python] získání IP adresy

Jan Jakubuv jakubuv na gmail.com
Neděle Červen 3 20:23:13 CEST 2007


hmm, tipnul bych si ze to ze request.remote vraci 'localhost' bude i
problem proc sessions nefunguji jak maji. taky bych si tipnul ze
pricina proc je remote 'localhost' bude prave prevod adres z privatni
site. je ten server na kterem bezi cherrypy ten samy server co
zprostredkovava pripojeni k Internetu pocitacum z privatni site?
nicmene nezapominejte ze z pohledu pocitace v Internetu maji vsechny
pocitace ve VPN stejnou IP adresu.

v tomto pripade bych dopurucoval zapomenout na sessions a udelat
'praci sessions rucne'. nejakou variaci na kod nize. kod je funkcni
aplikace, chybi pouze login.conf + nekolik malickosti jako je
odhlaseni uzivatele a smazani neaktivnich seanci jednou za cas (po pul
hodine..)

#!/usr/bin/python
# -*- coding: utf-8 -*-

HTMLheader = """
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
	<title>login</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
"""

HTMLfooter = """
</body></html>
"""

HTMLloginform = '''
    <form method="post" action="index?login">
        <input type="text" name="user">
        <input type="password" name="passwd">
        <input type="submit">
    </form>
'''

import cherrypy
import random
from time import time

class Login:
    def __init__(self):
        self.sessions = {}
        random.seed()

    def freshid(self):
        "Vrati jednoznacny retezec identifikujici seanci"
        def _id():
            return str(random.random())[2:]
        id = _id()
        while id in self.sessions:
            id = _id()
        return id

    def setsessiondata(self, sessionid, data):
        "Spoji data se seanci sessionid"
        self.sessions[sessionid] = data

    def getsessiondata(self, sessionid):
        "Vrati data seance sessionid"
        if sessionid in self.sessions:
            return self.sessions[sessionid]
        else:
            return None

    @cherrypy.expose
    def index(self, login=None, user=None, passwd=None, sessionid=None):
        "hlavni a jedina stranka"
        if not (login is None or user is None or passwd is None):
            # prihlaseni uzivatele (overit heslo,...)
            sessionid = self.freshid()
            self.setsessiondata(sessionid, dict(user=user, time=time()))
            html = '''<h1>welcome %s</h1>
            <p><a href="index?sessionid=%s">your data</a>
            ''' % (user, sessionid)
        elif sessionid is not None:
            # prihlaseny uzivatel
            data = self.getsessiondata(sessionid)
            if data is None:
                html = '<h1>timeout</h1>'
            else:
                html = '<h1>your data: %s' % data
        else:
            # formular pro prihlaseni
            html = HTMLloginform
        return HTMLheader + html + HTMLfooter

cherrypy.quickstart(Login(), config="login.conf")

honza.

3.6.07, Vladislav Ludík <vlada na ludik.cz>:
>
>  Jan Jakubuv napsal(a):
>
>  *cherrypy.request.remote.ip vrací: /localhost/
>
> cherrypy.request.remote vrací: /http.Host('localhost', 1111, 'localhost')/
>
>
>  u me vsechno funguje jak ma. request.remote mi vraci instanci Host
> odpovidajici volajici strane. prvni polozka by mela by urcite
> _ciselna_ ip adresa, jste si jisty, ze volate spravnou funkci?
> zkousite to na lokalni siti nebo na Internetu? mate posledni verzi
> cherrypy?
>
> honza.
>
>  Je sice pravda, že přes víkend jsem na VPN-ce a přímo na lokální síti jsem
> to zatím nezkoušel.
>
>  Ale i tak moje IP adresa je reálná přes VPN připojení z lokální sítě:
>
>  Adaptér pro protokol PPP :
>
>          Přípona DNS podle připojení . . . :
>          Popis . . . . . . . . . . . . . . : WAN (PPP/SLIP) Interface
>          Fyzická Adresa. . . . . . . . . . : 00-53-45-00-00-00
>          Protokol DHCP povolen . . . . . . : Ne
>          Adresa IP . . . . . . . . . . . . : 192.168.1.212
>          Maska podsítě . . . . . . . . . . : 255.255.255.255
>          Výchozí brána . . . . . . . . . . :
>          Servery DNS . . . . . . . . . . . : 192.168.1.1
>          Primární server WINS. . . . . . . : 192.168.1.1
>
>  VL
>
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>


Další informace o konferenci Python