--.--
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

03.23
Fri
こんばんは!

Wiresharkでぼーっとパケットを観察していると

結構な頻度で流れてくるSSDPってプロトコルのなにか。

疑問に思ったので調べてみました。

どうやらUPnPで使ってるものらしい。

ってことでUPnPってなにか。

UPnPってのはネットワークに散在するいろんなデバイス同士が、

お互いに通信しあって何かをする技術らしい。

ちなみにマイクロソフトが提唱したらしい。

これを使えば、例えばネットワーク内の家電とかが他の家電と通信しあったり、

ルータと通信しあったりなどして、いろいろ便利なことやら他の機器の設定を遠隔でできるもよう。

それでSSDPってのがその通信の方式を定めたプロトコルっぽいのです。

しかもSSDPはHTTPベースな感じでわかりやすい!!

これはやってみない手はない!!

ということで、今回は私のマシンから家のルータとやり取りをしてみたいと思います。

概要としては以下の通り。

M-SEARCHというメソッドで、反応してもらいたいデバイスの情報を書いて、

UDPマルチキャストする。

そのデバイスが、M-SEARCHを送信した送信者に自分の情報を送る。

こんな感じです。以下Pythonコード。



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


import socket
import sys


REQUEST = ""
TIMEOUT = 5
ADDRESS = "239.255.255.250"
PORT    = 1900
GETMAX  = 65536
MYADDR  = socket.gethostbyname(socket.gethostname())
TYPE    = "upnp:rootdevice"

REQUEST_EACH_LINE = [                  \
"M-SEARCH * HTTP/1.1"                 ,\
"HOST: %s"%(ADDRESS + ":" + str(PORT)),\
"MAN: \"ssdp:discover\""              ,\
"MX: %s"%(TIMEOUT)                    ,\
"ST: %s"%(TYPE)                       ,\
]


for eachline in REQUEST_EACH_LINE : REQUEST += eachline + "\r\n"
REQUEST += "\r\n"


sock = socket.socket(socket.AF_INET , socket.SOCK_DGRAM)
sock.settimeout(TIMEOUT)
sock.bind((MYADDR ,PORT))

sock.sendto( REQUEST , (ADDRESS , PORT))


while (True):
	try:
		data , remoteaddress = sock.recvfrom(GETMAX)
		print data
		break

	except socket.timeout:
		print "timeouted"
		break


sock.close()
sys.exit()


因みにこれを送ったあとに返ってきた応答。

HTTP/1.1 200 OK
CACHE-CONTROL: max-age=120
Location: http://192.168.1.1:2869/upnp/rootdevice.xml
SERVER: IGD-HTTP/1.1 UPnP/1.0 UPnP-Device-Host/1.0
ST: upnp:rootdevice
EXT:
USN: uuid:297e639d-d6819c63::upnp:rootdevice


このLocationってとこにアクセスすると、ルータとやり取りするための詳しい情報が掛かれたxmlがもらえます。

そして、そのxmlの内容を解析して対象のデバイスにいろいろ行えるようになると思うのですが、

それはまた今度にしたいと思います。

それでは!!
スポンサーサイト

comment 2 trackback 0
トラックバックURL
http://telracsmoratori.blog.fc2.com/tb.php/106-dc3d3ca8
トラックバック
コメント
勉強になりました。
自分も気になってました。
みやたん | 2013.11.18 12:08 | 編集
UPnP付きのブロードバンドルータにWAN側からいたずらされることがあるということもあるのでしょうかネ
| 2014.11.28 16:53 | 編集
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。