新月の開発

f78278c3 :Anonymous 2008-08-25 23:21
shingetsu/upnp.py でうちのルーターはポートが開かなかったので色々いじって以下の修正を加えるとポートの開放に成功しました。

$ svn diff upnp.py
Index: upnp.py
===================================================================
--- upnp.py (revision 1463)
+++ upnp.py (working copy)
@@ -122,7 +122,7 @@
query.extend(('</m:%s>' % command,
'</SOAP-ENV:Body>',
'</SOAP-ENV:Envelope>'))
- return "\n".join(query)
+ return "\n".join(query) + "\r\n"


class Router(dict):
===================================================================

Router.getwan()でWAN側のIPアドレスを取得するのは成功していて、Route.openport()で以下のようなエラーが返ってきてました。

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:schemas-upnp-org:control-1-0">
<errorCode xmlns="">402</errorCode>
<errorDescription xmlns="">Invalid Args</errorDescription>
</UPnPError>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

UPnPの詳細は知らないので、なぜ”\r\n"を追記すれば AddPortMapping が成功したのかはわかりません。
参考にしたソースコードは miniupnpc です。http://miniupnp.free.fr/
Powered by shinGETsu.