私は半径がrlm_python
であり、coovachilliのDHCPロケーションoption82
を16進数またはバイナリー形式で取得しています。ストリングがこの値\001\027\002\025\001+\001\024
として示しているが、option82
フィールドを意味TLVs-type,length,values
でエンコードsuboptions
を含有するように、Pythonのショーが切り捨てられた値に見えるように、それをキャッチPython解凍バッファーデータ
は、1バイト長、続いタイプ0x01(circuit ID, per RFC 3046)
始まります。
どのように私はこれをキャッチし、オプションを適切に解凍することができますか?
struct.unpack
を使用して文字列を解凍しましたが、意味がありません。のoption82
フィールドにはパックされていません。
Python 2.4.3 (#1, May 5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from struct import *
>>> unpack('=hhl',"\001\027\002\025\001+\001\024")
(5889, 5378, 335620865)
UPDATE:
Coovachilliが--locationopt82
でコンパイルされ、それが属性として場所を送信し、このような何か...
rad_recv: Accounting-Request packet from host 10.66.53.49 port 53178, id=101, length=342
ChilliSpot-Version = "1.3.0"
ChilliSpot-Acct-View-Point = ChilliSpot-Client-View-Point
Event-Timestamp = "Apr 18 2013 11:59:16 BST"
User-Name = "3C-D0-F8-4A-05-68"
Acct-Input-Octets = 0
Acct-Output-Octets = 22851
Acct-Input-Gigawords = 0
Acct-Output-Gigawords = 0
Acct-Input-Packets = 0
Acct-Output-Packets = 370
Acct-Session-Time = 5401
ChilliSpot-Session-State = Authorized
Acct-Status-Type = Interim-Update
Acct-Session-Id = "516fbceb00000002"
Framed-IP-Address = 10.75.33.46
NAS-Port-Type = Wireless-802.11
NAS-Port = 2
NAS-Port-Id = "00000002"
Calling-Station-Id = "3C-D0-F8-4A-05-68"
Called-Station-Id = "00-50-56-B7-66-00"
NAS-IP-Address = 10.75.32.7
ChilliSpot-Location = "\001\030\002\026\001+\001\024"
ChilliSpot-Location-Change-Count = 15
NAS-Identifier = "VLAN299-REGENT"
WISPr-Location-ID = "isocc=GR,cc=44,ac=01200,network=mywifi,my_Network_regent"
WISPr-Location-Name = "REGENT"
FreeRADIUSのは、アカウンティング要求を探しrlm_python
モジュールを持ってい
def accounting(p):
file = open("/tmp/test.log","a")
username = None
chillilocation = None
output = StringIO.StringIO()
for t in p:
if t[0] == 'User-Name':
username = t[1]
elif t[0] == 'ChilliSpot-Location':
chillilocation = t[1]a
output.write(t[1])
content = output.getvalue()
file.write("I am being called in radius accouting section as %s and location is %s \n" % (username,content))
file.close()
print "---Accounting---"
radiusd.radlog(radiusd.L_INFO, '*** radlog call in accounting (0) ***')
print
print p
return radiusd.RLM_MODULE_OK
私はChilliSpot-Locati string
とstringIO
で、無駄のないstructを使って解凍しました。それはTLV形式のようです...
どのようにそれを取り除くのですか?
rlm_pythonとcoovachilliを使用して値を文字列としてキャッチするにはどうすればよいですか? – RedBaron
私はそれを – krisdigitx
より上に更新しました。全部はわかりませんが、 'ChilliSpot-Location'は人間が読める文字列であるはずです。 [specs](http://wiki-robin.meshroot.com/@api/deki/files/220/=dictionary.chillispot)と[例](http://coova.org/node/4170)を参照してください(中央のどこかに 'CoovaChilliからのRADIUSアクセス要求'と書かれています) – RedBaron