用c#向ip138.com发信息查ip归属地,为什么有的正确,有的错误呀。
输入如 211.69.0.3 就能正确查出归属地。
输入如 221.142.245.144 查出的归属地的IP是就本机的,而不是所输入的。
错误在哪里呀?我刚学socket请各位帮忙看看。http://www.rrcz.com/webform1.aspx 改成asp.net了,大家试试看。代码好下:
IPAddress ip;
ip=IPAddress.Parse("61.145.121.115");IPEndPoint hostEP=new IPEndPoint(ip,80);
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(hostEP);string strSend=
"POST /ips.asp HTTP/1.1\r\n"+
"Accept: */*\r\n"+
"Referer: http://www.ip138.com/\r\n"+
"Accept-Language: zh-cn\r\n"+
"Content-Type: application/x-www-form-urlencoded\r\n"+
"Accept-Encoding: gzip, deflate\r\n"+
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n"+
"Host: www.ip138.com\r\n"+
"Content-Length: 22\r\n"+
"Connection: Close\r\n"+
"Cache-Control: no-cache\r\n"+
"Cookie: ASPSESSIONIDAATCSSDB=ELHAGJLCFNMGMENIMCOFJIMB\r\n"+
"\r\n"+
"ip="+textBox1.Text+"&action=2\r\n";
byte[] bytesSend=new byte[1024];
bytesSend=System.Text.Encoding.Default.GetBytes(strSend);
socket.Send(bytesSend,bytesSend.Length,0);string strReceive="";
byte[] receiveByte=new byte[1024];
int bytes=0;
while(true)
{
bytes=socket.Receive(receiveByte,receiveByte.Length,0);strReceive+=System.Text.Encoding.Default.GetString(receiveByte,0,bytes);
if (bytes<=0)
break;
}
socket.Shutdown(SocketShutdown.Both);
socket.Close();
//FileStream fs=new FileStream("c:\3.txt",FileMode.Create,FileAccess.ReadWrite);
//System.IO.StreamWriter sw=new StreamWriter(@"c:\4.txt",false);
//sw.Write(strReceive);
//sw.Close();string re1,re2;
int pos1,pos2;pos1=strReceive.IndexOf("查询结果1");
if (pos1>0)
{
pos2=pos1;
pos2+=5;
while(true)
{
if (strReceive.IndexOf("<",pos1,1)>0)
{re1="查询结果1"+strReceive.Substring(pos2,pos1-pos2);
break;
}
if (pos1>=strReceive.Length-1)
{
pos1=-2;
re1="查询结果1:未知IP!";
break;
}
else
pos1++;
}
}
else
re1="查询结果1:未知IP!";//////////////////////////////////////////////////////////////////////////
pos1=strReceive.IndexOf("查询结果2");
if (pos1>0)
{
pos2=pos1;
pos2+=5;
while(true)
{
if (strReceive.IndexOf("<",pos1,1)>0)
{re2="查询结果2"+strReceive.Substring(pos2,pos1-pos2);
break;
}
if (pos1>=strReceive.Length-1)
{
pos1=-2;
re2="查询结果2:未知IP!";
break;
}
else
pos1++;
}
}
else
re2="查询结果2:未知IP!";MessageBox.Show(re1);
MessageBox.Show(re2);