spring mongodb 查询去重数据
spring mongodb 查询去重数据 ,根据某一字段值重复,去掉重复列查询
更新时间:2022-07-15 08:07
最满意答案
java获取固定IP发来所有的数据包,需要实现网络嗅探的部分功能: 代码如下; /******************* * JpcapTip.java */ package m; import jpcap.PacketReceiver; import jpcap.JpcapCaptor; import jpcap.packet.*; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; //import java.net.InetAddress; //import java.net.UnknownHostException; public class JpcapTip implements PacketReceiver { public void receivePacket(Packet packet) { System.out.println("********************************************"); /*IP数据报报文头*/ byte[] l=packet.header; /* for (int t=0;t<21;t++){ System.out.print(l[t]+" *** "); } */ String str=""; System.out.print("报文头 : "); for (int i=0;i<l.length;i++) { //str=str+l; int m=0; m=l[i]; m=m<<24; m=m>>>24; str=str+Integer.toHexString(m); //System.out.print(" *** "+l[i]); } System.out.println(str); int d=l.length; System.out.println("首部长度 :"+(d*8)+"bit"); /*分析源IP地址和目的IP地址*/ /*分析协议类型*/ /** if(packet.getClass().equals(IPPacket.class)) { IPPacket ipPacket=(IPPacket)packet; byte[] iph=ipPacket.option; String iphstr=new String(iph); System.out.println(iphstr); } */ if(packet.getClass().equals(ARPPacket.class)) { System.out.println("协议类型 :ARP协议"); try { ARPPacket arpPacket = (ARPPacket)packet; System.out.println("源网卡MAC地址为 :"+arpPacket.getSenderHardwareAddress()); System.out.println("源IP地址为 :"+arpPacket.getSenderProtocolAddress()); System.out.println("目的网卡MAC地址为 :"+arpPacket.getTargetHardwareAddress()); System.out.println("目的IP地址为 :"+arpPacket.getTargetProtocolAddress()); } catch( Exception e ) { e.printStackTrace(); } } else if(packet.getClass().equals(UDPPacket.class)) { System.out.println("协议类型 :UDP协议"); try { UDPPacket udpPacket = (UDPPacket)packet; System.out.println("源IP地址为 :"+udpPacket.src_ip); int tport = udpPacket.src_port; System.out.println("源端口为:"+tport); System.out.println("目的IP地址为 :"+udpPacket.dst_ip); int lport = udpPacket.dst_port; System.out.println("目的端口为:"+lport); } catch( Exception e ) { e.printStackTrace(); } } else if(packet.getClass().equals(TCPPacket.class)) { System.out.println("协议类型 :TCP协议"); try { TCPPacket tcpPacket = (TCPPacket)packet; int tport = tcpPacket.src_port; System.out.println("源IP地址为 :"+tcpPacket.src_ip); System.out.println("源端口为:"+tport); System.out.println("目的IP地址为 :"+tcpPacket.dst_ip); int lport = tcpPacket.dst_port; System.out.println("目的端口为:"+lport); } catch( Exception e ) { e.printStackTrace(); } } else if(packet.getClass().equals(ICMPPacket.class)) System.out.println("协议类型 :ICMP协议"); else System.out.println("协议类型 :GGP、EGP、JGP协议或OSPF协议或ISO的第4类运输协议TP4"); /*IP数据报文数据*/ byte[] k=packet.data; String str1=""; System.out.print("数据 : "); for(int i=0;i<k.length;i++) { //int m=0; //m=k[i]; //m=m<<24; //m=m>>>24; //str1=str+Integer.toHexString(m); str1 = new String(k); //str1=str1+k[i]; //System.out.print(" *** "+k[i]); } System.out.println(str1); System.out.println("数据报类型 : "+packet.getClass()); System.out.println("********************************************"); } public static void main(String[] args) throws Exception{ // TODO 自动生成方法存根 NetworkInterface[] devices = JpcapCaptor.getDeviceList(); //.getDeviceList();. //for (int i =0; i<devices.length;i++) { int a=0; //try { /*本地网络信息*/ byte[] b=devices[1].mac_address; //网卡物理地址 //} //catch() {} System.out.print("网卡MAC : 00"); for (int j=0;j<b.length;j++){ //a=a<<8; a=b[j]; a=a<<24; a=a>>>24; System.out.print(Integer.toHexString(a)); } System.out.println(); NetworkInterfaceAddress[] k=devices[1].addresses; //System.out.println("网卡MAC : "+Integer.toHexString(a)); for(int n=0;n<k.length;n++) { System.out.println("本机IP地址 : "+k[n].address); //本机IP地址 System.out.println("子网掩码 : "+k[n].subnet); //子网掩码 } System.out.println("网络连接类型 : "+devices[1].datalink_description); //} NetworkInterface deviceName = devices[1]; /*将网卡设为混杂模式下用网络设备deviceName*/ JpcapCaptor jpcap =JpcapCaptor.openDevice(deviceName, 2000, false, 1); //openDevice(deviceName,1028,false,1); jpcap.loopPacket(-1,new JpcapTip()); } }
其他回答
用多播的方式发的吧 InetAddress groupAddress = InetAddress.getByName("224.1.1.1")//发的ip MulticastSocket server = new MulticastSocket(port); server.joinGroup(groupAddress); 好像是这样设的,MulticastSocket 是DatagramPacket的子类,具体你看看API好了
额。。。初看到你的问题的时候吓了一跳。还以为是用java实现网络嗅探呢。 你问的是socket编程? 那么socket 均分为两个, 一部分是服务端, 一部分是客户端, 服务端一直开启着监听, 现在你的情况和平时不太一样的是,平时,是服务端的ip不变化,而客户端的变化。而是客户端给服务端进行发送。 你的情况是相反。客户端经常变动ip或者端口,而要求服务端发送。 其实转换一下思路就好了。 有点类似于现在网页在线聊天工具里的“长连接”思想。 你的那个固定ip服务器,可以完全不管,你是什么端口。因为,如果你的电脑准备好接受数据了。那么你就向服务端发起请求。而服务端将结果发送给你。就是说,不是说服务器一直给你发送,而是,你这个客户端只要准备好接受数据,就向服务器发送请求。这样,不是没有问题了么。。 如果还按你那个思路就是,你的电脑,需要实现网络嗅探的部分功能。但是 Java是网络层以上的。 你通过Java的Socket得到的数据包嗅探不出什么敏感的东东了。 所以Java不适合做网络嗅探。 不过还好,现在有了叫jpcap的工具。你可以搜一下, 下面是一个简单的实现,里面获得了来源的ip和端口 你可以加一个判断,如果来源ip是固定的ip的话,那么,你可以获取对应的数据包 本程序用eclipse编辑在J2SDK6.0+WinPcap 3.1+Jpcap 0.5下编译运行 /******************* * JpcapTip.java */ package m; import jpcap.PacketReceiver; import jpcap.JpcapCaptor; import jpcap.packet.*; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; //import java.net.InetAddress; //import java.net.UnknownHostException; public class JpcapTip implements PacketReceiver { public void receivePacket(Packet packet) { System.out.println("********************************************"); /*IP数据报报文头*/ byte[] l=packet.header; /* for (int t=0;t<21;t++){ System.out.print(l[t]+" *** "); } */ String str=""; System.out.print("报文头 : "); for (int i=0;i<l.length;i++) { //str=str+l; int m=0; m=l[i]; m=m<<24; m=m>>>24; str=str+Integer.toHexString(m); //System.out.print(" *** "+l[i]); } System.out.println(str); int d=l.length; System.out.println("首部长度 :"+(d*8)+"bit"); /*分析源IP地址和目的IP地址*/ /*分析协议类型*/ /** if(packet.getClass().equals(IPPacket.class)) { IPPacket ipPacket=(IPPacket)packet; byte[] iph=ipPacket.option; String iphstr=new String(iph); System.out.println(iphstr); } */ if(packet.getClass().equals(ARPPacket.class)) { System.out.println("协议类型 :ARP协议"); try { ARPPacket arpPacket = (ARPPacket)packet; System.out.println("源网卡MAC地址为 :"+arpPacket.getSenderHardwareAddress()); System.out.println("源IP地址为 :"+arpPacket.getSenderProtocolAddress()); System.out.println("目的网卡MAC地址为 :"+arpPacket.getTargetHardwareAddress()); System.out.println("目的IP地址为 :"+arpPacket.getTargetProtocolAddress()); } catch( Exception e ) { e.printStackTrace(); } } else if(packet.getClass().equals(UDPPacket.class)) { System.out.println("协议类型 :UDP协议"); try { UDPPacket udpPacket = (UDPPacket)packet; System.out.println("源IP地址为 :"+udpPacket.src_ip); int tport = udpPacket.src_port; System.out.println("源端口为:"+tport); System.out.println("目的IP地址为 :"+udpPacket.dst_ip); int lport = udpPacket.dst_port; System.out.println("目的端口为:"+lport); } catch( Exception e ) { e.printStackTrace(); } } else if(packet.getClass().equals(TCPPacket.class)) { System.out.println("协议类型 :TCP协议"); try { TCPPacket tcpPacket = (TCPPacket)packet; int tport = tcpPacket.src_port; System.out.println("源IP地址为 :"+tcpPacket.src_ip); System.out.println("源端口为:"+tport); System.out.println("目的IP地址为 :"+tcpPacket.dst_ip); int lport = tcpPacket.dst_port; System.out.println("目的端口为:"+lport); } catch( Exception e ) { e.printStackTrace(); } } else if(packet.getClass().equals(ICMPPacket.class)) System.out.println("协议类型 :ICMP协议"); else System.out.println("协议类型 :GGP、EGP、JGP协议或OSPF协议或ISO的第4类运输协议TP4"); /*IP数据报文数据*/ byte[] k=packet.data; String str1=""; System.out.print("数据 : "); for(int i=0;i<k.length;i++) { //int m=0; //m=k[i]; //m=m<<24; //m=m>>>24; //str1=str+Integer.toHexString(m); str1 = new String(k); //str1=str1+k[i]; //System.out.print(" *** "+k[i]); } System.out.println(str1); System.out.println("数据报类型 : "+packet.getClass()); System.out.println("********************************************"); } public static void main(String[] args) throws Exception{ // TODO 自动生成方法存根 NetworkInterface[] devices = JpcapCaptor.getDeviceList(); //.getDeviceList();. //for (int i =0; i<devices.length;i++) { int a=0; //try { /*本地网络信息*/ byte[] b=devices[1].mac_address; //网卡物理地址 //} //catch() {} System.out.print("网卡MAC : 00"); for (int j=0;j<b.length;j++){ //a=a<<8; a=b[j]; a=a<<24; a=a>>>24; System.out.print(Integer.toHexString(a)); } System.out.println(); NetworkInterfaceAddress[] k=devices[1].addresses; //System.out.println("网卡MAC : "+Integer.toHexString(a)); for(int n=0;n<k.length;n++) { System.out.println("本机IP地址 : "+k[n].address); //本机IP地址 System.out.println("子网掩码 : "+k[n].subnet); //子网掩码 } System.out.println("网络连接类型 : "+devices[1].datalink_description); //} NetworkInterface deviceName = devices[1]; /*将网卡设为混杂模式下用网络设备deviceName*/ JpcapCaptor jpcap =JpcapCaptor.openDevice(deviceName, 2000, false, 1); //openDevice(deviceName,1028,false,1); jpcap.loopPacket(-1,new JpcapTip()); } } 加油~~
相关问答
更多-
java如何编程实现,获取固定IP发来所有的数据包 ?[2023-04-14]
java获取固定IP发来所有的数据包,需要实现网络嗅探的部分功能: 代码如下; /******************* * JpcapTip.java */ package m; import jpcap.PacketReceiver; import jpcap.JpcapCaptor; import jpcap.packet.*; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; //import java.net. ... -
IP数据包的解析[2022-03-29]
改了一个问题,其他没错 另外,这里也不需要setsockopt #include#include #include #pragma comment(lib,"ws2_32") #define IO_RCVALL _WSAIOW(IOC_VENDOR,1) typedef struct IP_HEAD { union { unsigned char Version; unsigned char HeadLen; }; un ... -
tcp/ip数据包[2022-03-27]
TCP/IP是网络设备共同遵循的协议,封包解包的规则都是一样的,强烈推荐你去看看TCP/IP详解卷,一共有三册,网上有下的PDF文档,内容很细很全面,NAT就是一对一的地址转换,通常是在网关设备上用作把私网地址转换成公网地址。 -
TCP/IP 通过网关的详细流程及数据包格式是怎样的 ?[2022-04-11]
1、TCP协议是四层协议,负责网络数据包的正确传递,IP协议是三层协议,负责将数据进行打包。当IP协议把数据打包后,TCP协议将数据包进行分段,加装传输包头进行传输。如果IP数据包内的IP地址为同一网段数据,则不发送至IP网关,如果数据包内的传输地址非本网地址,刚TCP将数据包传送到网关或路由器进行转发。 2、网关只负责对网络进行解释和转发,不接收相应的应用,如果是透明传输,不加密,则网关直接将数据包进行转发。 -
这个 由MSDN支持的 问题声称,Windows不再(XP SP 2到7)允许使用原始套接字传输TCP数据。 This question, backed up by MSDN, claims that Windows no longer (XP SP 2 through 7) allows transmission of TCP data using raw sockets.
-
您正确的用法是使用packet.hasHeader(ip,1)。 这将获得IPv4的第二个实例并将其与数据包绑定。 另请注意,您对getHeader的使用是多余的。 如果标头存在,hasHeader会自动将标头绑定到数据包。 即if(packet.hasHeader(ip, 1)) { sIP=ip.source(); sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(sIP); } if(packet.hasHeader(ip, 1)) { sIP= ...
-
我认为这是正常的,因为发出有效的ARP请求需要一个IP地址(Scapy维护自己的ARP表,独立于OS)。 您可以自己设置目标地址: srp(Ether(dst="[MAC address]")/[...]) 。 如果您需要先获取MAC地址,请以相同方式创建并发送ARP请求。 要查询Scapy的ARP表,请访问元素conf.netcache.arp_cache ,它是Scapy特定的dict子类(称为CacheInstance )。 例如,要为主机添加条目(然后使用sr([...])而不是srp(Ether( ...
-
我不敢相信我之前没有抓到这个。 我忘了在debugPacket(packet)之后调用packet.clear() debugPacket(packet) 。 I cant believe i didn't catch this earlier. I forgot to call packet.clear() after debugPacket(packet).
-
ICaptureDevice.MacAddress应该为您提供适配器的mac地址,因此您的实时设备的MacAddress属性。 ICaptureDevice.MacAddress should give you the adapter's mac address, so the MacAddress property of your live devices.
-
sniff()返回一个包含所有嗅探数据包的类似列表的对象,但您将其视为一个单独的数据包。 尝试这个: >>> print rcvPkt[0].getlayer(IP).src 192.168.42.1 sniff() returns a list-like object containing all of the sniffed packets, but you are treating it like an individual packet. Try this: >>> print rcvPkt[0] ...