我用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错误
那位知道的指点下,对网络方面的东东不是很清楚啊