我想像在 c 中一样在 java 中创建原始数据包。
// Flags (8 bits)
// FIN flag (1 bit)
tcp_flags[0] = 0;
// SYN flag (1 bit): set to 1
tcp_flags[1] = 1;
// RST flag (1 bit)
tcp_flags[2] = 0;
// PSH flag (1 bit)
tcp_flags[3] = 0;
// ACK flag (1 bit)
tcp_flags[4] = 0;
// URG flag (1 bit)
tcp_flags[5] = 0;
// ECE flag (1 bit)
tcp_flags[6] = 0;
// CWR flag (1 bit)
tcp_flags[7] = 0;
这是 c 代码的一部分,您可以使用它来设置标志。我找到了一些像 jnetpcap 这样的库,但正如我所见,没有任何函数可以操纵它们。 另外,有人知道我是否可以从 c 执行 c 代码吗?
最佳答案
我很难理解你到底想做什么(用 C 解释,你在那里使用什么,libnet,原始套接字......)?在 Java 中,您可以使用 java.net 创建原始 TCP/IP 套接字。包。
其次,jnetpcap(以及您在 pcap 中找到的任何其他库)用于网络捕获。如果您阅读 jnetpcap,就会说它是一个用于访问 C 库 libpcap 的 Java 库。
最后,jnetpcap项目也回答了你的问题。是的,您可以从 Java 中运行 C 代码。看看 Java Native Interface
编辑: 抱歉大家完全忘了我用过jpcap对于这种事情大约六年前(该死的时间飞逝)。
import jpcap.*;
import jpcap.packet.*;
JpcapSender sender = JpcapSender.openDevice(NetworkInterface);
Packet packet = new TCPPacket(); //construct your TCP
packet.data = data; //what ever you want to send as payload
EthernetPacket ether = new EthernetPacket();
ether.frametype = (short) /*whatever you need*/
packet.datalink = ether;
sender.sendPacket(packet);
上面的代码是我过去所做的一个非常粗略的捷径。但是有很多教程和示例可以帮助您入门!
关于java 创建原始数据包 tcp/icmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29652495/