java 创建原始数据包 tcp/icmp

标签 java c tcp

我想像在 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/

相关文章:

java - 如何在 BlackBerry 内存中创建目录

java - 我可以将来自 java 的哈希码与来自 javascript 的哈希码进行比较吗?

c - 打印字符串会产生垃圾,即使(我认为)它们是空终止的

java - 如何让 TCP Server 运行直至停止

sockets - 如何从套接字读取数据,直到客户端停止发送?

java - 一个 FileOutputStream 构造函数会调用另一个 FileOutputStream 构造函数吗?

java - eclipse 锁定 jar 文件

c - 如果我打算通过多个进程访问文件的多个部分,使用 CreateFileMapping 和 MapViewOfFile 的正确方法是什么?

c++ - 与实现无关的浮点/整数转换

c# - 保持事件状态并请求超时