我用 Java 编写了这个程序,并在 Ubuntu 14 下运行它。
运行时,它通过端口 53 将 UDP 数据包发送到在 Debian 8.0 下运行的缓存 DNS 服务器。
服务器向源发送回复。如何修改程序,使服务器回复另一个IP地址而不是在同一局域网内?
这是程序:
import java.io.*;
import java.net.*;
public class ClientSender {
private static Object InetAdress;
public static void main(String[] args) {
int i ;
for (i=0;i<1000;i++){
DatagramSocket skt;
try{
/////////////////////////////////////////
skt = new DatagramSocket(); /////creating socket
String msg = "Test";//////////message
byte[] b =msg.getBytes(); /// creating message
InetAddress host =InetAddress.getByName("192.168.1.3"); ///destination IP address
int serverSocket = 53; // Destination Port
///////////////////////////////////////////////////////////////
DatagramPacket request =new DatagramPacket(b,b.length,host,serverSocket);
skt.send(request); /////////////////////////creating packet
///////////////////////////////////////////////////////////////////////////////
//..................................// for receiving replies from destnation
byte [] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket (buffer, buffer.length);
skt.receive(reply); ///////////////////////////////////lestining to replies from destination
skt.close();///////////////closing socket
System.out.println(new String(request.getData()));
System.out.println(new String(reply.getData()));
}
catch (Exception ex)
{
}
}}
}
最佳答案
在 Java 中你无法做到这一点。
您当前的客户端 IP 地址将禁止服务器在您的 LAN 连接中选择不同客户端的 IP 地址。
这在 Java 中是不可能的。
关于java - 如何在java中反射(reflect)端口53上的UDP数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32180055/