65 unsigned int etherType = 12;
66 unsigned int ipHeader = 0;
67 unsigned int tcpHeader = 0;
70 if (package[etherType] == 0x81 && package[etherType+1] == 0x00) etherType += 4;
71 ipHeader = etherType + 2;
73 if (package[etherType] == 0x08 && package[etherType+1] == 0x00) {
74 unsigned int internetHeaderLength = (package[ipHeader] & 0x0f) * 4;
75 tcpHeader = ipHeader + internetHeaderLength;
77 std::swap_ranges(package+ipHeader+12,package+ipHeader+12+4,package+ipHeader+16);
79 else if (package[etherType] == 0x86 && package[etherType+1] == 0xdd) {
80 tcpHeader = ipHeader + 40;
82 std::swap_ranges(package+ipHeader+8,package+ipHeader+8+16,package+ipHeader+24);
88 std::swap_ranges(package+tcpHeader+0,package+tcpHeader+0+2,package+tcpHeader+2);
94 size_t frameSize,
int numPackages, uint64_t perPackageDelay,
bool swapIp)
104 for (
int i = 0;
i < numPackages; ++
i) {
111 std::memset(ptr, 0, frameSize);
112 std::memcpy(ptr, package, packageSize);
121 if (perPackageDelay != 0) {
122 std::this_thread::sleep_for(std::chrono::milliseconds(perPackageDelay));
127 std::this_thread::sleep_for(std::chrono::milliseconds(100));
134 std::this_thread::sleep_for(std::chrono::milliseconds(100));