JavaSE_网络编程_TCP_练习4_与浏览器和服务端交互

IE作为客户端,

ServerSocket作为服务端,

输出浏览器的请求消息

package source_code;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class IE_ServerSocket {
  public static void main(String[] args) throws IOException {
    /*方法说明:
     *自定义服务端,使用IE作为客户端,
     *看看IE(客户端)到底给我(服务端)发了什么请求!
     */
    ServerSocket ss = new ServerSocket(9090);//侦听9090端口
    Socket s = ss.accept();
    System.out.println(s.getInetAddress().getHostAddress()+".....connected");
    //把IE发送给服务端的数据全打印出来
    //看看浏览器中输入网址后,回车
    //http://127.0.0.1:9090/myweb/iframe.html
    //到底给服务端发的是啥?
    InputStream in = s.getInputStream();
    byte[] buf = new byte[1024];
    int len = in.read(buf);
    String text = new String(buf,0,len);
    System.out.println(text);
    //给客户端一个反馈信息(读取资源也同样可以)。
    PrintWriter out = new PrintWriter(s.getOutputStream(),true);
    out.println("<font color='red' size='7'>欢迎光临本站</font>");
    //显示在IE的document里面
    s.close();
    ss.close();
  }
}
================================
第1行是:请求行  
请求方式  /myweb/iframe.html  请求的资源路径   http协议版本。
第2段是:请求消息头 . 属性名:属性值
第3段是:空行
第4段是:请求体

GET /myweb/iframe.html HTTP/1.1
Accept: application/x-shockwave-flash, 
    image/gif, image/jpeg, image/pjpeg, image
    /pjpeg, application/vnd.ms-excel, 
    application/vnd.ms-powerpoint, application/msw
    ord, application/xaml+xml, 
    application/x-ms-xbap, application/x-ms-application, */*
Accept-Language: zh-cn
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; 
    YYGameAll_1.2.167057.92; Windows 
    NT 5.1; Trident/4.0; IEShow Toolbar; 
    IEShow herowyToolBar; .NET CLR 2.0.50727; .
    NET4.0C)
Accept-Encoding: gzip, deflate
Host: 127.0.0.1:9090
Connection: Keep-Alive



Socket客户端模拟浏览器,

伪造请求消息发送给Tomcat服务端,

输出应答消息

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.Socket;
/*
运行这个前,要先运行tomcat服务器
用Socket客户端模拟浏览器:
通过伪造请求行+请求消息头+空行+请求体
对Tomcat服务器发起请求!
并且输出Tomcat服务器返回的应答消息
*/
public class FakeIE_Tomcat {
    public static void main(String[] args) throws Exception {
        Socket s=new Socket("127.0.0.1",8080);
        PrintWriter out=new PrintWriter(s.getOutputStream(), true);
        out.println("GET /myweb/iframe.html HTTP/1.1");
        out.println("Accept: */*");
        out.println("Accept Encoding: gzip,deflate");
        out.println("Host: 127.0.0.1:8080");// 一个IP上可能有多个服务器
        out.println("Connection: close");
        out.println("");//换行,即请求消息头和消息体的分割
        out.println("");//消息体
        //读取tomcat服务器返回的信息(应答消息)
        InputStream in=s.getInputStream();
        byte[] buf=new byte[1024];
        int len=in.read(buf);
        System.out.println(new String(buf,0,len));
        s.close();
    }
}
//下面就是tomcat服务器响应请求后,返回的信息!(应答消息)
/*
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"538-1384427776000"
Last-Modified: Thu, 14 Nov 2013 11:16:16 GMT
Content-Type: text/html
Content-Length: 538
Date: Thu, 14 Nov 2013 11:17:59 GMT
Connection: close

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>
    这里面是title
</title>
</head>
<body>
<font color="#000099" size="+3">演示iframe标签(画中画,页面中挖个洞)</font>
<iframe src="1.html" height="300",width="500">
    如果看到这些文字,说明您的浏览器不支持iframe标签
</iframe>
<iframe src="www.baidu.com/xxx.js" height="0",width="0">
    如果iframe的高宽都被设置为0,
    并且访问地址是一个js脚本,就可能实现一个恶意代码!
</iframe>
</body>
</html>
*/



你可能感兴趣的:(java,socket,tcp,浏览器,服务器)