簡體   English   中英

在cherrypy中獲取原始目標IP

[英]Obtaining original destination ip in cherrypy

我在cherrypy服務器上運行了強制門戶,並且我已經設置了iptables規則,以重新引導所有從未注冊的MAC地址到門戶的HTTP流量。 用戶通過門戶網站初始頁面向我注冊后,我添加了iptables異常以允許其流量通過。
現在,我要做的就是將用戶重定向到他們最初要訪問的頁面-在將用戶發送到門戶之前。 我知道iptables會為所有TCP數據包設置一個具有原始目的地信息的字段,並且我知道有一個名為getsockopt的C函數可以讀取該字段。 但是,我不知道如何在cherrypy中訪問與請求關聯的套接字。

有人可以幫我嗎? :)

我不是底層網絡專家,也不知道常見的開放式Wi-Fi授權實施如何標記其客戶端。 但是在我看來,真正的事實是,在OSI模型中 ,較低的層對較高的層一無所知。 換句話說,IP不了解HTTP術語,也不知道頁面URL。

我認為可以通過自定義CherryPy檢索套接字引用,這樣最多可以為您提供原始IP地址,而不是URL。 同樣,將網絡(IP)和應用程序(HTTP)層混合在一起,並通常在多個位置管理一個應用程序實體,可能會導致各種問題。 例如,處理HTTP代理,例如正向和反向代理,它們不會保留較低層的細微差別。

更新

好的,因為您說自己也有請求URL,所以這里是如何檢索原始套接字的方法。 如您所見,它深入人心,本質上是最終用戶不應依賴的實現細節。 它不是合同的一部分,可以在任何下一版本中進行更改。 因此,您有很好的機會在腳上開槍。

#!/usr/bin/env python


import cherrypy


config = {
  'global' : {
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
    'server.thread_pool' : 8
  },
}


class App:

  @cherrypy.expose
  def index(self):
    '''For caveats and details on the slippery slope, take a look at ws4py
    https://github.com/Lawouach/WebSocket-for-Python/blob/master/ws4py/server/cherrypyserver.py
    '''
    print(cherrypy.serving.request.rfile.rfile._sock)

    return 'Make sure you know what you are doing.'


if __name__ == '__main__':
  cherrypy.quickstart(App(), '/', config)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM