سؤال

أنا بحاجة إلى إنشاء البرنامج الذي يتلقى طلب HTTP و توجيه تلك الطلبات إلى ملقمات ويب.

الرسم البياني http://img269.imageshack.us/img269/1862/h98trsly.jpg

لقد نجحت في هذا فقط باستخدام جافا مآخذ ولكن العميل يحتاج البرنامج الذي سيتم تنفيذه في Jpcap.أود أن أعرف إذا كان هذا هو ممكن وما الأدب يجب أن تكون القراءة من أجل هذا المشروع.

هذا ما لدي الآن من خلال خياطة معا قطعة من Jpcap التعليمي:

import java.net.InetAddress;
import java.io.*;
import jpcap.*;
import jpcap.packet.*;


public class Router {
    public static void main(String args[]) {
        //Obtain the list of network interfaces
        NetworkInterface[] devices = JpcapCaptor.getDeviceList();

        //for each network interface
        for (int i = 0; i < devices.length; i++) {
            //print out its name and description
            System.out.println(i+": "+devices[i].name + "(" + devices[i].description+")");

            //print out its datalink name and description
            System.out.println(" datalink: "+devices[i].datalink_name + "(" + devices[i].datalink_description+")");

            //print out its MAC address
            System.out.print(" MAC address:");
            for (byte b : devices[i].mac_address)
                System.out.print(Integer.toHexString(b&0xff) + ":");
            System.out.println();

            //print out its IP address, subnet mask and broadcast address
            for (NetworkInterfaceAddress a : devices[i].addresses)
                System.out.println(" address:"+a.address + " " + a.subnet + " "+ a.broadcast);
        }

        int index = 1;  // set index of the interface that you want to open.

        //Open an interface with openDevice(NetworkInterface intrface, int snaplen, boolean promics, int to_ms)
        JpcapCaptor captor = null;
        try {
            captor = JpcapCaptor.openDevice(devices[index], 65535, false, 20);
            captor.setFilter("port 80 and host 192.168.56.1", true);
        } catch(java.io.IOException e) {
            System.err.println(e);
        }

        //call processPacket() to let Jpcap call PacketPrinter.receivePacket() for every packet capture.
        captor.loopPacket(-1,new PacketPrinter());

        captor.close();
    }
}

class PacketPrinter implements PacketReceiver {
    //this method is called every time Jpcap captures a packet
    public void receivePacket(Packet p) {
        JpcapSender sender = null;
        try {
            NetworkInterface[] devices = JpcapCaptor.getDeviceList();
            sender = JpcapSender.openDevice(devices[1]);
        } catch(IOException e) {
            System.err.println(e);
        }


        IPPacket packet = (IPPacket)p;

        try {
            // IP Address of machine sending HTTP requests (the client)
            // It's still on the same LAN as the servers for testing purposes.
            packet.dst_ip = InetAddress.getByName("192.168.56.2");
        } catch(java.net.UnknownHostException e) {
            System.err.println(e);
        }

        //create an Ethernet packet (frame)
        EthernetPacket ether=new EthernetPacket();
        //set frame type as IP
        ether.frametype=EthernetPacket.ETHERTYPE_IP;
        //set source and destination MAC addresses

        // MAC Address of machine running reverse proxy server
        ether.src_mac = new MacAddress("08:00:27:00:9C:80").getAddress();
        // MAC Address of machine running web server
        ether.dst_mac = new MacAddress("08:00:27:C7:D2:4C").getAddress();

        //set the datalink frame of the packet as ether
        packet.datalink=ether;

        //send the packet
        sender.sendPacket(packet);

        sender.close();

        //just print out a captured packet
        System.out.println(packet);
    }
}

أي مساعدة سيكون موضع تقدير كبير.شكرا لك.

هل كانت مفيدة؟

المحلول

لماذا؟ ما هي الأسباب التي دفعته؟ هل يريد حقا لدفع عشر مرات تكلفة لنفس الشيء كنت قد فعلت؟

وأنت لا تحتاج Jpcap لتنفيذ HTTP الوكلاء. ويمكن القيام به تماما داخل java.net أو java.nio.

نصائح أخرى

أنا لا أعتقد أنك يمكن أن تجعل هذا يحدث على الأقل على ويندوز مربع.Jpcap هو مجرد التفاف على Winpcap ، وهذا الأساسية آلية لا يمكن إسقاط لوحظ الحزم:

http://www.mirrorservice.org/sites/ftp.wiretapped.net/pub/security/packet-capture/winpcap/misc/faq.htm#Q-17

لذا أنا لا أرى كيف يمكنك بناء الوكيل عكسي "في السلك". لا عليك أن تفعل ما يلي:

  1. نلاحظ واردة طلب HTTP من خلال التفكيك معا الحزم في الوقت الحقيقي وإفلاتها من أن تلقى المقصود المضيف.

  2. جعل البديل HTTP الطلب على أساس مهما الوكيل القواعد التي تنفذ.

  3. انتزاع الاستجابة من طلبك وطرد الحزم على السلك الذي وهمية استجابة من المضيف الأصلي ؟

منذ كنت لا يمكن إسقاط الواردة الحزم ، ألن المقصود المضيف محاولة التعامل مع الطلب ورمي الحزم الخاصة على الأسلاك في الرد ؟ هناك ربما أكثر حتى أنني لا أعرف عنه كما أنا لا الشبكات الخبراء.هذا السؤال جعلني غريبة عن ما سوف يكون من الممكن استخدام مثل هذه "شيم".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top