我想在java中创建原始数据包,如c。
// 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代码?
答案 0 :(得分:0)
我很难理解你到底想要做什么(用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);
上面的代码是我过去所做的非常粗略的捷径。但是有很多教程和示例可以开始使用!