void cmdGetIP(PCHAR szCmd) { if(!strlen(szCmd)) { pChatWindow->AddDebugMessage("Usage: /getip [player_id]"); return; } BYTE bytePlayerID; sscanf(szCmd,"%u",&bytePlayerID); if(pNetGame) { CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); if(pPlayerPool->GetSlotState(bytePlayerID)) { char ret[30]; DWORD ip = pPlayerPool->GetIPAddress(bytePlayerID); IP2String(ip,ret); pChatWindow->AddDebugMessage("%s is: %s", pPlayerPool->GetPlayerName(bytePlayerID),ret); } else { pChatWindow->AddDebugMessage("That player doesn't appear to be active."); } } }
/* * Program entry point * */ int main(int argc, char **argv) { pcap_t *lIFCHandle = NULL; char lTemp[1024]; char lFilter[1024]; bpf_u_int32 lNetMask; struct bpf_program lFCode; char *lIFC = argv[1]; int lPcapRetVal = 0; PETHDR lEHdr = NULL; PARPHDR lARPHdr = NULL; u_char *lPktData = NULL; struct pcap_pkthdr *lPktHdr = NULL; unsigned char lEthDstStr[MAX_MAC_LEN+1]; unsigned char lEthSrcStr[MAX_MAC_LEN+1]; unsigned char lARPEthDstStr[MAX_MAC_LEN+1]; unsigned char lARPEthSrcStr[MAX_MAC_LEN+1]; unsigned char lARPIPDstStr[MAX_IP_LEN+1]; unsigned char lARPIPSrcStr[MAX_IP_LEN+1]; if ((lIFCHandle = pcap_open(lIFC, 65536, PCAP_OPENFLAG_PROMISCUOUS, 1, NULL, lTemp)) != NULL) { ZeroMemory(&lFCode, sizeof(lFCode)); ZeroMemory(lFilter, sizeof(lFilter)); _snprintf(lFilter, sizeof(lFilter) - 1, "arp"); lNetMask = 0xffffff; // "255.255.255.0" // Compile the filter if(pcap_compile(lIFCHandle, &lFCode, (const char *) lFilter, 1, lNetMask) >= 0) { // Set the filter if(pcap_setfilter(lIFCHandle, &lFCode) >= 0) { while ((lPcapRetVal = pcap_next_ex((pcap_t*) lIFCHandle, (struct pcap_pkthdr **) &lPktHdr, (const u_char **) &lPktData)) >= 0) { if (lPcapRetVal == 1) { lEHdr = (PETHDR) lPktData; lARPHdr = (PARPHDR) (lPktData + sizeof(ETHDR)); ZeroMemory(lEthDstStr, sizeof(lEthDstStr)); ZeroMemory(lEthSrcStr, sizeof(lEthSrcStr)); ZeroMemory(lARPEthSrcStr, sizeof(lARPEthSrcStr)); ZeroMemory(lARPEthDstStr, sizeof(lARPEthDstStr)); ZeroMemory(lARPIPDstStr, sizeof(lARPIPDstStr)); ZeroMemory(lARPIPSrcStr, sizeof(lARPIPSrcStr)); MAC2String(lEHdr->ether_shost, lEthSrcStr, sizeof(lEthSrcStr)-1); MAC2String(lEHdr->ether_dhost, lEthDstStr, sizeof(lEthDstStr)-1); MAC2String(lARPHdr->sha, lARPEthSrcStr, sizeof(lARPEthSrcStr)-1); MAC2String(lARPHdr->tha, lARPEthDstStr, sizeof(lARPEthDstStr)-1); IP2String(lARPHdr->tpa, lARPIPDstStr, sizeof(lARPIPDstStr)-1); IP2String(lARPHdr->spa, lARPIPSrcStr, sizeof(lARPIPSrcStr)-1); printf("\nOperation: %s (%d)\n", (ntohs(lARPHdr->oper) == ARP_REQUEST)? "ARP Request" : "ARP Reply", lARPHdr->oper); printf(" MAC : %s -> %s\n", lEthSrcStr, lEthDstStr); printf(" ARP : %s -> %s\n", lARPEthSrcStr, lARPEthDstStr); printf(" IP : %s -> %s\n", lARPIPSrcStr, lARPIPDstStr); } } } } } return(0); }
static void HTTPProcess(HTTP_HANDLE h) { char bafs[26], r; BOOL lbContinue; static HTTP_INFO* ph; WORD w; static BYTE *p, *t; ph = &HCB[h]; do { lbContinue = FALSE; if(!TCPIsConnected(ph->socket)) { ph->smHTTP = SM_HTTP_IDLE; break; } switch(ph->smHTTP) { case SM_HTTP_IDLE: w = TCPGetArray(ph->socket, httpData, MAX_HTML_CMD_LEN); if(!w) { if(TCPGetRxFIFOFree(ph->socket) == 0) TCPDisconnect(ph->socket); // Request is too big, we can't support it. break; } httpData[w] = 0; t = p = httpData; while(*p) if(*p=='%') { *t++ = hex2bin(p+1); p += 3; } else *t++ = *p++; *t = 0; r = httpData[150]; httpData[150]=0; lbContinue = TRUE; ph->smHTTP = SM_HTTP_NOT_FOUND; if(strstrrampgm(httpData,"POST")) ph->smHTTP = SM_HTTP_POST; if(strstrrampgm(httpData,"GET")) { ph->smHTTP = SM_HTTP_HEADER; #ifndef _FAVICON_ if(strstrrampgm(httpData,(ROM void*)"favicon")) { TCPDisconnect(ph->socket); ph->smHTTP = SM_HTTP_IDLE; } #else if(strstrrampgm(httpData,"favicon")) ph->smHTTP = SM_ICO_HEADER; #endif if(strstrrampgm(httpData, "Sw_Pool")) AppConfig.who ^= 0x81; if(strstrrampgm(httpData, "Sw_Mode")) AppConfig.sw_mode ^= 1; if(strstrrampgm(httpData, "Sw_Clock")) AppConfig.CkSel ^= 1; if(strstrrampgm(httpData, "Sw_LEDs")) bLEDs ^= 1; } httpData[150]=r; break; case SM_HTTP_POST: exoit(ph->socket); memcpypgm2ram(spwrk,rMinPool,SZ_ROMS ); for(r=0;r<SZ_SRCH;r++) { BYTE *s; p = strstrrampgm(httpData,(ROM BYTE*)(DWORD)sComa[r]); if(p) { p+=5; t=strstrrampgm(p,ampa); if(t) { *t=0; s=p; switch(r) { // case C_JMAC: Hex2Mac(p); break; //S2Mac(p); break; case C_JMIP: StringToIPAddress(p,&AppConfig.MyIPAddr); break; case C_JMSK: StringToIPAddress(p,&AppConfig.MyMask); break; case C_JGTW: StringToIPAddress(p,&AppConfig.MyGateway); break; case C_PDNS: StringToIPAddress(p,&AppConfig.PrimaryDNSServer); break; case C_SDNS: StringToIPAddress(p,&AppConfig.SecondaryDNSServer); break; case C_WPRT: AppConfig.MyPort = atoi(p); break; case C_MPRT: while(*p) if((*p) == ',') { *p=0; AppConfig.MinPort[0] = atoi(s); break; } else p++; AppConfig.MinPort[1] = atoi(++p); *--p = ','; break; case C_MURL: while(*p) if((*p) == ',') { *p=0; strcpy(&spwrk[0],s); break; } else p++; strcpy(&spwrk[sizeof(rMinPool)/2],++p); *--p = ','; break; case C_USPA: while(*p) if((*p) == ',') { *p=0; strcpy(&spwrk[sizeof(rMinPool)],s); break; } else p++; strcpy(&spwrk[sizeof(rMinPool)+sizeof(rUsrPass)/2],++p); *--p = ','; break; } *t='&'; } } } ph->smHTTP = SM_HTTP_IDLE; SetUPS(); break; case SM_HTTP_NOT_FOUND: if(TCPIsPutReady(ph->socket) >= sizeof(hdrErr)) { TCPPutROMString(ph->socket, hdrErr); TCPFlush(ph->socket); TCPDisconnect(ph->socket); ph->smHTTP = SM_HTTP_IDLE; } break; #ifdef _FAVICON_ case SM_ICO_HEADER: if ( TCPIsPutReady(ph->socket) ) { lbContinue = TRUE; if(TCPIsPutReady(ph->socket) >= sizeof(hdrICO)+198) { TCPPutROMString(ph->socket, hdrICO); TCPPutROMArray(ph->socket, favicon,198); TCPFlush(ph->socket); TCPDisconnect(ph->socket); ph->smHTTP = SM_HTTP_IDLE; } } break; #endif case SM_HTTP_HEADER: if ( TCPIsPutReady(ph->socket) ) { lbContinue = TRUE; if(TCPIsPutReady(ph->socket) >= sizeof(hdrOK)) { TCPPutROMString(ph->socket, hdrOK); TCPFlush(ph->socket); ph->smHTTP = SM_HTTP_GET; ph->Pos = Page; } } break; case SM_HTTP_GET: TCPDiscard(ph->socket); if(TCPIsPutReady(ph->socket) >= 400) { ph->Pos = TCPPutROMString(ph->socket, ph->Pos); ph->Pos++; switch (*ph->Pos) { case 0: TCPDisconnect(ph->socket); ph->smHTTP = SM_HTTP_IDLE; ph->Pos = Page; break; case 1: DoStic(ph->socket, 1); break; case 2: DoStic(ph->socket, 2); break; case 3: DoStic(ph->socket, 3); break; // case 4: MAC2Hex(bafs); TCPPutString(ph->socket, bafs); break; case 5: IP2String(AppConfig.MyIPAddr,bafs); TCPPutString(ph->socket, bafs); break; case 6: IP2String(AppConfig.MyMask,bafs); TCPPutString(ph->socket, bafs); break; case 7: IP2String(AppConfig.MyGateway,bafs); TCPPutString(ph->socket, bafs); break; case 8: uitoa(AppConfig.MyPort,bafs); TCPPutString(ph->socket, bafs); break; case 9: IP2String(AppConfig.PrimaryDNSServer,bafs); TCPPutString(ph->socket, bafs); break; case 10: IP2String(AppConfig.SecondaryDNSServer,bafs); TCPPutString(ph->socket, bafs); break; case 11: uitoa(AppConfig.MinPort[0],bafs); TCPPutString(ph->socket, bafs); TCPPut(ph->socket,','); uitoa(AppConfig.MinPort[1],bafs); TCPPutString(ph->socket, bafs); break; case 12: TCPPutROMString(ph->socket, rMinPool[0]); TCPPut(ph->socket,','); TCPPutROMString(ph->socket, rMinPool[1]); break; case 13: TCPPutROMString(ph->socket, rUsrPass[0]); TCPPut(ph->socket,','); TCPPutROMString(ph->socket, rUsrPass[1]); break; } ph->Pos++; } TCPFlush(ph->socket); break; default: break; } } while( lbContinue ); }