📄 msproxy_clientprotocol.c
字号:
if (len < sizeof(res->clientack)) return NULL; memcpy(&res->clientack, mem, sizeof(res->clientack)); mem += sizeof(res->clientack); len -= sizeof(res->clientack); if (len < sizeof(res->pad5)) return NULL; memcpy(res->pad5, mem, sizeof(res->pad5)); mem += sizeof(res->pad5); len -= sizeof(res->pad5); if (len < sizeof(res->sequence)) return NULL; memcpy(&res->sequence, mem, sizeof(res->sequence)); mem += sizeof(res->sequence); len -= sizeof(res->sequence); if (len < sizeof(res->pad10)) return NULL; memcpy(res->pad10, mem, sizeof(res->pad10)); mem += sizeof(res->pad10); len -= sizeof(res->pad10); if (len < sizeof(res->RWSP)) return NULL; memcpy(res->RWSP, mem, sizeof(res->RWSP)); mem += sizeof(res->RWSP); len -= sizeof(res->RWSP); if (len < sizeof(res->pad15)) return NULL; memcpy(res->pad15, mem, sizeof(res->pad15)); mem += sizeof(res->pad15); len -= sizeof(res->pad15); if (len < sizeof(res->command)) return NULL; memcpy(&res->command, mem, sizeof(res->command)); mem += sizeof(res->command); len -= sizeof(res->command); switch (ntohs(res->command)) { case MSPROXY_HELLO_ACK: if (len < sizeof(res->packet._1.pad5)) return NULL; memcpy(res->packet._1.pad5, mem, sizeof(res->packet._1.pad5)); mem += sizeof(res->packet._1.pad5); len -= sizeof(res->packet._1.pad5); if (len < sizeof(res->packet._1.magic20)) return NULL; memcpy(&res->packet._1.magic20, mem, sizeof(res->packet._1.magic20)); mem += sizeof(res->packet._1.magic20); len -= sizeof(res->packet._1.magic20); if (len < sizeof(res->packet._1.pad10)) return NULL; memcpy(&res->packet._1.pad10, mem, sizeof(res->packet._1.pad10)); mem += sizeof(res->packet._1.pad10); len -= sizeof(res->packet._1.pad10); if (len < sizeof(res->packet._1.magic30)) return NULL; memcpy(&res->packet._1.magic30, mem, sizeof(res->packet._1.magic30)); mem += sizeof(res->packet._1.magic30); len -= sizeof(res->packet._1.magic30); if (len < sizeof(res->packet._1.pad15)) return NULL; memcpy(res->packet._1.pad15, mem, sizeof(res->packet._1.pad15)); mem += sizeof(res->packet._1.pad15); len -= sizeof(res->packet._1.pad15); if (len < sizeof(res->packet._1.magic35)) return NULL; memcpy(&res->packet._1.magic35, mem, sizeof(res->packet._1.magic35)); mem += sizeof(res->packet._1.magic35); len -= sizeof(res->packet._1.magic35); if (len < sizeof(res->packet._1.pad20)) return NULL; memcpy(res->packet._1.pad20, mem, sizeof(res->packet._1.pad20)); mem += sizeof(res->packet._1.pad20); len -= sizeof(res->packet._1.pad20); if (len < sizeof(res->packet._1.magic50)) return NULL; memcpy(&res->packet._1.magic50, mem, sizeof(res->packet._1.magic50)); mem += sizeof(res->packet._1.magic50); len -= sizeof(res->packet._1.magic50); if (len < sizeof(res->packet._1.pad30)) return NULL; memcpy(res->packet._1.pad30, mem, sizeof(res->packet._1.pad30)); mem += sizeof(res->packet._1.pad30); len -= sizeof(res->packet._1.pad30); if (len < sizeof(res->packet._1.magic60)) return NULL; memcpy(&res->packet._1.magic60, mem, sizeof(res->packet._1.magic60)); mem += sizeof(res->packet._1.magic60); len -= sizeof(res->packet._1.magic60); if (len < sizeof(res->packet._1.pad35)) return NULL; memcpy(res->packet._1.pad35, mem, sizeof(res->packet._1.pad35)); mem += sizeof(res->packet._1.pad35); len -= sizeof(res->packet._1.pad35); if (len < sizeof(res->packet._1.magic65)) return NULL; memcpy(&res->packet._1.magic65, mem, sizeof(res->packet._1.magic65)); mem += sizeof(res->packet._1.magic65); len -= sizeof(res->packet._1.magic65); if (len < sizeof(res->packet._1.pad40)) return NULL; memcpy(res->packet._1.pad40, mem, sizeof(res->packet._1.pad40)); mem += sizeof(res->packet._1.pad40); len -= sizeof(res->packet._1.pad40); if (len < sizeof(res->packet._1.udpport)) return NULL; memcpy(&res->packet._1.udpport, mem, sizeof(res->packet._1.udpport)); mem += sizeof(res->packet._1.udpport); len -= sizeof(res->packet._1.udpport); if (len < sizeof(res->packet._1.udpaddr)) return NULL; memcpy(&res->packet._1.udpaddr, mem, sizeof(res->packet._1.udpaddr)); mem += sizeof(res->packet._1.udpaddr); len -= sizeof(res->packet._1.udpaddr); break; case MSPROXY_USERINFO_ACK: if (len < sizeof(res->packet._2.pad5)) return NULL; memcpy(res->packet._2.pad5, mem, sizeof(res->packet._2.pad5)); mem += sizeof(res->packet._2.pad5); len -= sizeof(res->packet._2.pad5); if (len < sizeof(res->packet._2.magic5)) return NULL; memcpy(&res->packet._2.magic5, mem, sizeof(res->packet._2.magic5)); mem += sizeof(res->packet._2.magic5); len -= sizeof(res->packet._2.magic5); break; case MSPROXY_BIND_ACK: case MSPROXY_SOMETHING_1_ACK: if (len < sizeof(res->packet._3.pad1)) return NULL; memcpy(res->packet._3.pad1, mem, sizeof(res->packet._3.pad1)); mem += sizeof(res->packet._3.pad1); len -= sizeof(res->packet._3.pad1); if (len < sizeof(res->packet._3.magic10)) return NULL; memcpy(&res->packet._3.magic10, mem, sizeof(res->packet._3.magic10)); mem += sizeof(res->packet._3.magic10); len -= sizeof(res->packet._3.magic10); if (len < sizeof(res->packet._3.pad3)) return NULL; memcpy(res->packet._3.pad3, mem, sizeof(res->packet._3.pad3)); mem += sizeof(res->packet._3.pad3); len -= sizeof(res->packet._3.pad3); if (len < sizeof(res->packet._3.boundport)) return NULL; memcpy(&res->packet._3.boundport, mem, sizeof(res->packet._3.boundport)); mem += sizeof(res->packet._3.boundport); len -= sizeof(res->packet._3.boundport); if (len < sizeof(res->packet._3.boundaddr)) return NULL; memcpy(&res->packet._3.boundaddr, mem, sizeof(res->packet._3.boundaddr)); mem += sizeof(res->packet._3.boundaddr); len -= sizeof(res->packet._3.boundaddr); if (len < sizeof(res->packet._3.pad10)) return NULL; memcpy(res->packet._3.pad10, mem, sizeof(res->packet._3.pad10)); mem += sizeof(res->packet._3.pad10); len -= sizeof(res->packet._3.pad10); if (len < sizeof(res->packet._3.magic15)) return NULL; memcpy(&res->packet._3.magic15, mem, sizeof(res->packet._3.magic15)); mem += sizeof(res->packet._3.magic15); len -= sizeof(res->packet._3.magic15); if (len < sizeof(res->packet._3.pad15)) return NULL; memcpy(res->packet._3.pad15, mem, sizeof(res->packet._3.pad15)); mem += sizeof(res->packet._3.pad15); len -= sizeof(res->packet._3.pad15); if (len < sizeof(res->packet._3.NTLMSSP)) return NULL; memcpy(res->packet._3.NTLMSSP, mem, sizeof(res->packet._3.NTLMSSP)); mem += sizeof(res->packet._3.NTLMSSP); len -= sizeof(res->packet._3.NTLMSSP); if (len < sizeof(res->packet._3.magic50)) return NULL; memcpy(&res->packet._3.magic50, mem, sizeof(res->packet._3.magic50)); mem += sizeof(res->packet._3.magic50); len -= sizeof(res->packet._3.magic50); if (len < sizeof(res->packet._3.pad50)) return NULL; memcpy(res->packet._3.pad50, mem, sizeof(res->packet._3.pad50)); mem += sizeof(res->packet._3.pad50); len -= sizeof(res->packet._3.pad50); if (len < sizeof(res->packet._3.magic55)) return NULL; memcpy(&res->packet._3.magic55, mem, sizeof(res->packet._3.magic55)); mem += sizeof(res->packet._3.magic55); len -= sizeof(res->packet._3.magic55); if (len < sizeof(res->packet._3.magic60)) return NULL; memcpy(&res->packet._3.magic60, mem, sizeof(res->packet._3.magic60)); mem += sizeof(res->packet._3.magic60); len -= sizeof(res->packet._3.magic60); if (len < sizeof(res->packet._3.magic65)) return NULL; memcpy(&res->packet._3.magic65, mem, sizeof(res->packet._3.magic65)); mem += sizeof(res->packet._3.magic65); len -= sizeof(res->packet._3.magic65); if (len < sizeof(res->packet._3.pad60)) return NULL; memcpy(res->packet._3.pad60, mem, sizeof(res->packet._3.pad60)); mem += sizeof(res->packet._3.pad60); len -= sizeof(res->packet._3.pad60); if (len < sizeof(res->packet._3.magic70)) return NULL; memcpy(&res->packet._3.magic70, mem, sizeof(res->packet._3.magic70)); mem += sizeof(res->packet._3.magic70); len -= sizeof(res->packet._3.magic70); if (len < sizeof(res->packet._3.magic75)) return NULL; memcpy(&res->packet._3.magic75, mem, sizeof(res->packet._3.magic75)); mem += sizeof(res->packet._3.magic75); len -= sizeof(res->packet._3.magic75); if (len < sizeof(res->packet._3.pad70)) return NULL; memcpy(res->packet._3.pad70, mem, sizeof(res->packet._3.pad70)); mem += sizeof(res->packet._3.pad70); len -= sizeof(res->packet._3.pad70); if (len > sizeof(res->packet._3.ntdomain)) swarnx("hmm, ntdomain length is %d, our max is %d?", len, sizeof(res->packet._3.ntdomain) - 1); memcpy(res->packet._3.ntdomain, mem, MIN(len, sizeof(res->packet._3.ntdomain) - 1)); res->packet._3.ntdomain[len] = NUL; mem += len; len -= len; break; case MSPROXY_SOMETHING_2_ACK: case MSPROXY_SOMETHING_2_ACK2: case MSPROXY_BIND2_ACK: if (len < sizeof(res->packet._4.pad5)) return NULL; memcpy(res->packet._4.pad5, mem, sizeof(res->packet._4.pad5)); mem += sizeof(res->packet._4.pad5); len -= sizeof(res->packet._4.pad5); break; case MSPROXY_RESOLVE_ACK: { if (len < sizeof(res->packet.resolve.addroffset)) return NULL; memcpy(&res->packet.resolve.addroffset, mem, sizeof(res->packet.resolve.addroffset)); mem += sizeof(res->packet.resolve.addroffset); len -= sizeof(res->packet.resolve.addroffset); if (len < sizeof(res->packet.resolve.pad5)) return NULL; memcpy(res->packet.resolve.pad5, mem, sizeof(res->packet.resolve.pad5)); mem += sizeof(res->packet.resolve.pad5); len -= sizeof(res->packet.resolve.pad5); mem += res->packet.resolve.addroffset; if (len < sizeof(res->packet.resolve.hostaddr)) return NULL; memcpy(&res->packet.resolve.hostaddr, mem, sizeof(res->packet.resolve.hostaddr)); mem += sizeof(res->packet.resolve.hostaddr); len -= sizeof(res->packet.resolve.hostaddr); break; } case MSPROXY_CONNECT_ACK: case MSPROXY_BINDINFO: if (len < sizeof(res->packet._5.magic1)) return NULL; memcpy(&res->packet._5.magic1, mem, sizeof(res->packet._5.magic1)); mem += sizeof(res->packet._5.magic1); len -= sizeof(res->packet._5.magic1); if (len < sizeof(res->packet._5.pad5)) return NULL; memcpy(res->packet._5.pad5, mem, sizeof(res->packet._5.pad5)); mem += sizeof(res->packet._5.pad5); len -= sizeof(res->packet._5.pad5); if (len < sizeof(res->packet._5.clientport)) return NULL; memcpy(&res->packet._5.clientport, mem, sizeof(res->packet._5.clientport)); mem += sizeof(res->packet._5.clientport); len -= sizeof(res->packet._5.clientport); if (len < sizeof(res->packet._5.clientaddr)) return NULL; memcpy(&res->packet._5.clientaddr, mem, sizeof(res->packet._5.clientaddr)); mem += sizeof(res->packet._5.clientaddr); len -= sizeof(res->packet._5.clientaddr); if (len < sizeof(res->packet._5.magic10)) return NULL; memcpy(&res->packet._5.magic10, mem, sizeof(res->packet._5.magic10)); mem += sizeof(res->packet._5.magic10); len -= sizeof(res->packet._5.magic10); if (len < sizeof(res->packet._5.magic15)) return NULL; memcpy(&res->packet._5.magic15, mem, sizeof(res->packet._5.magic15)); mem += sizeof(res->packet._5.magic15); len -= sizeof(res->packet._5.magic15); if (len < sizeof(res->packet._5.serverport)) return NULL; memcpy(&res->packet._5.serverport, mem, sizeof(res->packet._5.serverport)); mem += sizeof(res->packet._5.serverport); len -= sizeof(res->packet._5.serverport); if (len < sizeof(res->packet._5.srcport)) return NULL; memcpy(&res->packet._5.srcport, mem, sizeof(res->packet._5.srcport)); mem += sizeof(res->packet._5.srcport); len -= sizeof(res->packet._5.srcport); if (len < sizeof(res->packet._5.boundport)) return NULL; memcpy(&res->packet._5.boundport, mem, sizeof(res->packet._5.boundport)); mem += sizeof(res->packet._5.boundport); len -= sizeof(res->packet._5.boundport); if (len < sizeof(res->packet._5.boundaddr)) return NULL; memcpy(&res->packet._5.boundaddr, mem, sizeof(res->packet._5.boundaddr)); mem += sizeof(res->packet._5.boundaddr); len -= sizeof(res->packet._5.boundaddr); if (len < sizeof(res->packet._5.pad10)) return NULL; memcpy(res->packet._5.pad10, mem, sizeof(res->packet._5.pad10)); mem += sizeof(res->packet._5.pad10); len -= sizeof(res->packet._5.pad10); break; case MSPROXY_CONNECT_AUTHFAILED: case MSPROXY_BIND_AUTHFAILED: break; default: if (ntohs(res->command) >> 8 == MSPROXY_CONNREFUSED || ntohs(res->command) >> 12 == MSPROXY_CONNREFUSED) ; else slog(LOG_DEBUG, "%s: unknown command in msproxy reply: 0x%x", function, ntohs(res->command)); } return mem;}static char *request2mem(req, mem) const struct msproxy_request_t *req; char *mem;{ memcpy(mem, &req->clientid, sizeof(req->clientid)); mem += sizeof(req->clientid); memcpy(mem, &req->magic25, sizeof(req->magic25)); mem += sizeof(req->magic25); memcpy(mem, &req->serverid, sizeof(req->serverid)); mem += sizeof(req->serverid); memcpy(mem, &req->serverack, sizeof(req->serverack)); mem += sizeof(req->serverack); memcpy(mem, &req->pad10, sizeof(req->pad10)); mem += sizeof(req->pad10); memcpy(mem, &req->sequence, sizeof(req->sequence)); mem += sizeof(req->sequence); memcpy(mem, &req->pad11, sizeof(req->pad11)); mem += sizeof(req->pad11); memcpy(mem, &req->RWSP, sizeof(req->RWSP)); mem += sizeof(req->RWSP); memcpy(mem, &req->pad15, sizeof(req->pad15)); mem += sizeof(req->pad15); memcpy(mem, &req->command, sizeof(req->command)); mem += sizeof(req->command); switch (ntohs(req->command)) { case MSPROXY_HELLO: memcpy(mem, &req->packet._1.pad1, sizeof(req->packet._1.pad1)); mem += sizeof(req->packet._1.pad1); memcpy(mem, &req->packet._1.magic3, sizeof(req->packet._1.magic3)); mem += sizeof(req->packet._1.magic3); memcpy(mem, &req->packet._1.pad3, sizeof(req->packet._1.pad3)); mem += sizeof(req->packet._1.pad3); memcpy(mem, &req->packet._1.magic5, sizeof(req->packet._1.magic5)); mem += sizeof(req->packet._1.magic5); memcpy(mem, &req->packet._1.pad5, sizeof(req->packet._1.pad5)); mem += sizeof(req->packet._1.pad5); memcpy(mem, &req->packet._1.magic10, sizeof(req->packet._1.magic10)); mem += sizeof(req->packet._1.magic10); memcpy(mem, &req->packet._1.pad6, sizeof(req->packet._1.pad6)); mem += sizeof(req->packet._1.pad6); memcpy(mem, &req->packet._1.magic15, sizeof(req->packet._1.magic15)); mem += sizeof(req->packet._1.magic15); memcpy(mem, &req->packet._1.pad10, sizeof(req->packet._1.pad10)); mem += sizeof(req->packet._1.pad10); memcpy(mem, &req->packet._1.magic20, sizeof(req->packet._1.magic20)); mem += sizeof(req->packet._1.magic20); memcpy(mem, &req->packet._1.magic25, sizeof(req->packet._1.magic25)); mem += sizeof(req->packet._1.magic25); memcpy(mem, &req->packet._1.magic30, sizeof(req->packet._1.magic30)); mem += sizeof(req->packet._1.magic30); memcpy(mem, &req->packet._1.pad20, sizeof(req->packet._1.pad20)); mem += sizeof(req->packet._1.pad20); memcpy(mem, &req->packet._1.magic35, sizeof(req->packet._1.magic35)); mem += sizeof(req->packet._1.magic35); memcpy(mem, &req->packet._1.pad30, sizeof(req->packet._1.pad30)); mem += sizeof(req->packet._1.pad30); memcpy(mem, &req->packet._1.magic40, sizeof(req->packet._1.magic40));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -