Javascript 什么可以阻止Windows计算机上伪造的UDP数据包?

Javascript 什么可以阻止Windows计算机上伪造的UDP数据包?,javascript,node.js,sockets,udp,raw-sockets,Javascript,Node.js,Sockets,Udp,Raw Sockets,我试图创建一个简单的IP地址欺骗程序。目标是说服本地网络上的电脑游戏连接到互联网服务器。游戏仅通过UDP广播发现服务器,不接受服务器IP 因此,我想让游戏误以为它通过创建一个伪造的UDP数据包从internet服务器接收了应答信息 我成功地使用raw socket生成了具有UDP负载的IPV4数据包。只要我设置了正确的IP,它就会被发送 然而,如果我把假IP放进包里,它就不会从机器里出来。我在我的机器上的Wireshark里看不到它。我还注意到有东西修正了我数据包上的IPV4校验和。我总是发送校

我试图创建一个简单的IP地址欺骗程序。目标是说服本地网络上的电脑游戏连接到互联网服务器。游戏仅通过UDP广播发现服务器,不接受服务器IP

因此,我想让游戏误以为它通过创建一个伪造的UDP数据包从internet服务器接收了应答信息

我成功地使用
raw socket
生成了具有UDP负载的IPV4数据包。只要我设置了正确的IP,它就会被发送

然而,如果我把假IP放进包里,它就不会从机器里出来。我在我的机器上的Wireshark里看不到它。我还注意到有东西修正了我数据包上的IPV4校验和。我总是发送校验和
0xFFFF
,但Wireshark看到了这一点:

如何使用原始套接字发送它:

const raw = require("raw-socket");
const UDPPacket = require("../generic/UDPPacket");
const IPV4Packet = require("../generic/IPV4Packet");

var socket = raw.createSocket({ protocol: raw.Protocol.UDP });

socket.on("message", function (buffer, source) {
    console.log("received " + buffer.length + " bytes from " + source);
});
// UDPPacket and IPV4 packet are classes that I wrote in order to 
// generate the UDP and IPV4 byte data
const packet = new UDPPacket();
packet.srcPort = 27888;
packet.dstPort = 1234;
packet.data = responseBuffer;
const buf = packet.fullBuffer;
const ipv4packet = new IPV4Packet();
ipv4packet.payloadBuffer = buf;

// I send the message form several IPs, but only mine works
const iprand = "192.168.110.";
let ipincrement = 75 * 2;
// my actual IP right now
ipv4packet.srcAddr = "192.168.110.79";
ipv4packet.dstAddr = "192.168.110.1";


setInterval(() => {
    // Try to send it from another IP
    ipv4packet.srcAddr = iprand + Math.round((++ipincrement)/2);
    const ipv4buf = ipv4packet.fullBuffer;
    socket.send(ipv4buf, 0, ipv4buf.length, ipv4packet.dstAddr, function (error, bytes) {
        // I'm not sure what does this exactly do,
        // I found it on the internet ¯\_(ツ)_/¯
        // But without it, I cannot send the IPV4 headers
        socket.setOption(
            raw.SocketLevel.IPPROTO_IP,
            raw.SocketOption.IP_HDRINCL,
            new Buffer([0x01, 0x00, 0x00, 0x00]),
            4
        );
    },
    function (error, bytes) {
        // always prints that bytes were sent
        if (error)
            console.log(error.toString());
        else
            console.log(bytes, " bytes sent!");
    }
    );
}, 700)
谁在阻止和更改我的数据包?我试过禁用防火墙,但没用

请注意,即使目标是本地计算机,消息也会丢失。

请参阅:

在Windows 7、Windows Vista、带Service Pack 2(SP2)的Windows XP和带Service Pack 3(SP3)的Windows XP上,通过原始套接字发送流量的能力受到以下几种方式的限制:


无法通过原始套接字发送源地址无效的UDP数据报。网络接口上必须存在任何传出UDP数据报的IP源地址,否则数据报将被丢弃。进行此更改是为了限制恶意代码创建分布式拒绝服务攻击的能力,并限制发送伪造数据包(具有伪造源IP地址的TCP/IP数据包)的能力。

当然,必须有一个解决方法,至少只能在我自己的计算机内进行伪造数据包。