
主要原理是利用网卡的混杂模式,和以太网自身的特点进行的。
java写的话用 JPACAP
Jpcap是一个能够抓取与发送网络数据包的Java组件。可以使用Jpcap从一个网络接口获取数据包,然后在Java中对它们进行分析和显示。同样也可以通过一个网络接口发送任意数据包。Jpcap当前能够 捕获以太网,IPv4,IPv6,ARP/RARP,TCP,UDP和ICMPv4数据包。
Jpcap实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,Jpcap调用wincap/libcap,而给Java语言提供一个公共的接口,从而实现了平台无关性。在官方网站上声明,Jpcap支持FreeBSD3x,Linux RedHat61, Fedora Core4,Solaris,and Microsoft Windows 2000/XP等系统。
Jpcap的整个结构大体上跟wincap/libpcap是很相像的,例如NetworkInterface类对应wincap的 typedef struct_ADAPTER ADAPTER,getDeviceList()对应pcap_findalldevs()等等。
Jpcap主要的类有如下几个:
1.NetworkInterface
该类的每一个实例代表一个网络设备,一般就是网卡。这个类只有一些数据成员,除了继承自javalangObject的基本方法以外,没有定义其它方法。
2.JpcapCaptor
该类提供了一系列静态方法实现一些基本的功能。该类一个实例代表建立了一个与指定设备的链接,可以通过该类的实例来控制设备,例如设定网卡模式、设定过滤关键字等等。
3.JpcapSender
该类专门用于控制数据包的发送。
4.Packet
这个是所有其它数据包类的父类。Jpcap所支持的数据包有:
ARPPacket、DatalinkPacket、EthernetPacket、ICMPPacket、IPPacket、TCPPacket、UDPPacket。
public static boolean Isipv4(String ipv4){
if(ipv4==null || ipv4length()==0){
return false;//字符串为空或者空串
}
String[] parts=ipv4split("\\");//因为java doc里已经说明, split的参数是reg, 即正则表达式, 如果用"|"分割, 则需使用"\\|"
if(partslength!=4){
return false;//分割开的数组根本就不是4个数字
}
for(int i=0;i<partslength;i++){
try{
int n=IntegerparseInt(parts[i]);
if(n<0 || n>255){
return false;//数字不在正确范围内
}
}catch (NumberFormatException e) {
return false;//转换数字不正确
}
}
return true;
}
你在本地访问本地服务器??
那是对的。
你预期的结果是什么?是你上万维网的那个IP吗?还是你局域网IP(如果局域网的话)?
是这样的,IP是针对你的上一级资源分配设备的,比如路由器或交换机。你的IP主要做的事情是让上一级在网络层能寻址到你。
如果你是局域网上网,可能你在你们局域网内是192168133(举个例子),你访问百度,百度看到的是帮助你最终连入万维网的那个设备的IP,你的这个IP是看不到的。
所以,自己访问自己,当然看到127001了,也不可能是“localhost”。
以上就是关于网络嗅探器的设计与实现 全代码 最简单的就行 最好用java 可以用的加分全部的内容,包括:网络嗅探器的设计与实现 全代码 最简单的就行 最好用java 可以用的加分、判断字符串是否是合法的ipv4地址、java截取ip为什么IP是127.0.0.1等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)