我用http模拟SIP报文向飞信的Proxy Server注册
以下是抓包下来的:
POST /ht/sd.aspx HTTP/1.1
Content-Type: application/oct-stream
User-Agent: IIC2.0/PC 3.5.1170
Host: 221.176.31.36
Content-Length: 361
Expect: 100-continue
Connection: Keep-Alive
HTTP/1.1 100 Continue
R fetion.com.cn SIP-C/2.0
F: 634831365
I: 1
Q: 1 R
L: 298<args><device type="PC" version="0" client-version="3.5.1170" /><caps value="simple-im;im-session;temp-group;personal-group;im-relay" /><events value="contact;permission;system-message;personal-group;compact" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>
HTTP/1.1 401 Unauthorized
Connection: close
Date: Wed, 02 Sep 2009 01:59:25 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 68
<?xml version="1.0" encoding="utf-8" ?><results status-code="401" />
怎么没有返回RIP的报文,那怎么拿到nonce值啊?
以下是飞信的正常的报文
R fetion.com.cn SIP-C/2.0
F: 634831365
I: 1
Q: 1 R
L: 298
<args><device type="PC" version="0" client-version="3.5.1170" /><caps value="simple-im;im-session;temp-group;personal-group;im-relay" /><events value="contact;permission;system-message;personal-group;compact" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>
SIP-C/2.0 401 Unauthoried
F: 634831365
I: 1
Q: 1 R
W: Digest algorithm="MD5-sess;SHA1-sess",nonce="7272DF5771C41CF84206913A7B3DF858"
下面是我测试的代码
void FetionRegister()
{
string domain = "fetion.com.cn";
// 飞信客户端为最新版Fetion2008_3.5.1170
string fetionLoginXml = "<args><device type=\"PC\" version=\"0\" client-version=\"3.5.1170\" /><caps value=\"simple-im;im-session;temp-group;personal-group;im-relay\" /><events value=\"contact;permission;system-message;personal-group;compact\" /><user-info attributes=\"all\" /><presence><basic value=\"400\" desc=\"\" /></presence></args>";
// 飞信发送短信实际的服务通道<http-tunnel>http://221.176.31.36/ht/sd.aspx</http-tunnel>
string fetionSIPUrl = "http://221.176.31.36/ht/sd.aspx";
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream outStream = null;
Stream inStream = null;
try
{
request = WebRequest.Create(fetionSIPUrl) as HttpWebRequest;
request.ContentType = "application/oct-stream";
request.UserAgent = "IIC2.0/PC 3.5.1170";
request.Method = "POST";
request.CookieContainer = new CookieContainer();
// 设置cookie
//request.CookieContainer.Add(new Cookie(this.SSIC.Name, this.SSIC.Value, "/", "221.176.31.36"));
//request.CookieContainer.Add(this.SSIC);
string sipc = String.Format("R fetion.com.cn SIP-C/2.0\r\nF: 634831365\r\nI: 1\r\nQ: 1 R\r\nL: {0}\r\n",Encoding.UTF8.GetBytes(fetionLoginXml).Length);
byte[] data = Encoding.UTF8.GetBytes(sipc + fetionLoginXml);
request.ContentLength = data.Length;
outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
inStream = response.GetResponseStream();
StreamReader sr = new StreamReader(inStream, Encoding.UTF8);
Console.WriteLine(response.Headers);
Console.ReadKey();
String resultConstent = sr.ReadToEnd();
sr.Close();
Console.Write(resultConstent);
Console.ReadKey();
}
catch (WebException e)
{
Console.WriteLine(e.Message);
response = e.Response as HttpWebResponse;
inStream = response.GetResponseStream();
StreamReader sr = new StreamReader(inStream, Encoding.UTF8);
Console.WriteLine(response.Headers);
Console.ReadKey();
String resultConstent = sr.ReadToEnd();
Console.Write(resultConstent);
foreach(Cookie c in response.Cookies)
Console.WriteLine(c.ToString());
Console.ReadKey();
}
}另外我把cookie(SSIPortal登录拿到的Credential)加上的话就返回400 bad request错误
那位知道的指点下,对网络方面的东东不是很清楚啊
以下是抓包下来的:
POST /ht/sd.aspx HTTP/1.1
Content-Type: application/oct-stream
User-Agent: IIC2.0/PC 3.5.1170
Host: 221.176.31.36
Content-Length: 361
Expect: 100-continue
Connection: Keep-Alive
HTTP/1.1 100 Continue
R fetion.com.cn SIP-C/2.0
F: 634831365
I: 1
Q: 1 R
L: 298<args><device type="PC" version="0" client-version="3.5.1170" /><caps value="simple-im;im-session;temp-group;personal-group;im-relay" /><events value="contact;permission;system-message;personal-group;compact" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>
HTTP/1.1 401 Unauthorized
Connection: close
Date: Wed, 02 Sep 2009 01:59:25 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/xml; charset=utf-8
Content-Length: 68
<?xml version="1.0" encoding="utf-8" ?><results status-code="401" />
怎么没有返回RIP的报文,那怎么拿到nonce值啊?
以下是飞信的正常的报文
R fetion.com.cn SIP-C/2.0
F: 634831365
I: 1
Q: 1 R
L: 298
<args><device type="PC" version="0" client-version="3.5.1170" /><caps value="simple-im;im-session;temp-group;personal-group;im-relay" /><events value="contact;permission;system-message;personal-group;compact" /><user-info attributes="all" /><presence><basic value="400" desc="" /></presence></args>
SIP-C/2.0 401 Unauthoried
F: 634831365
I: 1
Q: 1 R
W: Digest algorithm="MD5-sess;SHA1-sess",nonce="7272DF5771C41CF84206913A7B3DF858"
下面是我测试的代码
void FetionRegister()
{
string domain = "fetion.com.cn";
// 飞信客户端为最新版Fetion2008_3.5.1170
string fetionLoginXml = "<args><device type=\"PC\" version=\"0\" client-version=\"3.5.1170\" /><caps value=\"simple-im;im-session;temp-group;personal-group;im-relay\" /><events value=\"contact;permission;system-message;personal-group;compact\" /><user-info attributes=\"all\" /><presence><basic value=\"400\" desc=\"\" /></presence></args>";
// 飞信发送短信实际的服务通道<http-tunnel>http://221.176.31.36/ht/sd.aspx</http-tunnel>
string fetionSIPUrl = "http://221.176.31.36/ht/sd.aspx";
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream outStream = null;
Stream inStream = null;
try
{
request = WebRequest.Create(fetionSIPUrl) as HttpWebRequest;
request.ContentType = "application/oct-stream";
request.UserAgent = "IIC2.0/PC 3.5.1170";
request.Method = "POST";
request.CookieContainer = new CookieContainer();
// 设置cookie
//request.CookieContainer.Add(new Cookie(this.SSIC.Name, this.SSIC.Value, "/", "221.176.31.36"));
//request.CookieContainer.Add(this.SSIC);
string sipc = String.Format("R fetion.com.cn SIP-C/2.0\r\nF: 634831365\r\nI: 1\r\nQ: 1 R\r\nL: {0}\r\n",Encoding.UTF8.GetBytes(fetionLoginXml).Length);
byte[] data = Encoding.UTF8.GetBytes(sipc + fetionLoginXml);
request.ContentLength = data.Length;
outStream = request.GetRequestStream();
outStream.Write(data, 0, data.Length);
outStream.Close();
//发送请求并获取相应回应数据
response = request.GetResponse() as HttpWebResponse;
inStream = response.GetResponseStream();
StreamReader sr = new StreamReader(inStream, Encoding.UTF8);
Console.WriteLine(response.Headers);
Console.ReadKey();
String resultConstent = sr.ReadToEnd();
sr.Close();
Console.Write(resultConstent);
Console.ReadKey();
}
catch (WebException e)
{
Console.WriteLine(e.Message);
response = e.Response as HttpWebResponse;
inStream = response.GetResponseStream();
StreamReader sr = new StreamReader(inStream, Encoding.UTF8);
Console.WriteLine(response.Headers);
Console.ReadKey();
String resultConstent = sr.ReadToEnd();
Console.Write(resultConstent);
foreach(Cookie c in response.Cookies)
Console.WriteLine(c.ToString());
Console.ReadKey();
}
}另外我把cookie(SSIPortal登录拿到的Credential)加上的话就返回400 bad request错误
那位知道的指点下,对网络方面的东东不是很清楚啊
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货