日期:2014-05-20  浏览次数:20809 次

如何拦截HTTP的80端口的数据包
有一个测试程序启动的时候会往某服务器发送验证数据包,协议是HTTP,80端口。
我想把这个服务器的IP地址写到本机的host文件里,然后用自己的java写的服务器分析数据包的内容。

java程序的服务器部分代码:
Java code

        try { // start socket
            ServerSocket serverSocket = new ServerSocket(80);
        } catch (IOException ex) {
            System.out.println("Server" + ex.getMessage());
        }
        System.out.println("Server is starting " + serverSocket);
        Socket socket = null;
        while(1)
        {
            socket = serverSocket.accept();
        }


但是java服务器一直得不到测试程序的连接信息...请问是不是方法调用错了。HTTP不能用serverSocket?该用什么方法拦截呢?

------解决方案--------------------
socket可以接收http协议的请求,因为socket的通讯协议层次高于http。
楼主你还是没明白我一楼的解释。
建议你好好补补soceket通讯的基础再来解决这个问题吧,自己花点心思补补基础。
不要胡乱猜测,浪费时间。
------解决方案--------------------
要拦截网络端口数据包的话,用 Socket 可不行,得在网卡上做文章,Java API 根本做不到。

Java 有个开源框架 jpcap 可以做这种事情,其需要调用 native 代码。

如果只是想看看的话,有很多工具,比如:wireshark, smartsniff, tcpdump/windump 等等
------解决方案--------------------
经过本人长达三个月的思考,做出以下结论:

1.你想栏你电脑向外发的数据,所以其实你的电脑是个客户端。是客户端就不能用serverSocket
2.我们假设你的电脑是当做HTTP服务器,那么80端口被服务器占用了,你的java程序就不能绑定到80端口上。
。。。
10.总之。我觉得java就不是写这种程序的料
------解决方案--------------------
1 HOST文件配置的是为了能直接跳过dns解析吧,应该配置ip和域名的对应,你直接配置ip对应不会起作用.
2 那个软件是否支持代理,如果支持的话设置代理地址为本地,端口为80,使用上面代码就可以,不过缺少内容的输出部分
3 可以试试fiddler2.微软出的一个工具,很小