void C4Network2Client::AddAddrFromPuncher(const C4NetIO::addr_t &addr)
{
	AddAddr(C4Network2Address(addr, P_UDP), true);
	// If the outside port matches the inside port, there is no port translation and the
	// TCP address will probably work as well.
	if (addr.GetPort() == Config.Network.PortUDP && Config.Network.PortTCP > 0)
	{
		auto tcpAddr = addr;
		tcpAddr.SetPort(Config.Network.PortTCP);
		AddAddr(C4Network2Address(tcpAddr, P_TCP), true);
	}
	// Save IPv6 address for TCP simultaneous connect.
	if (addr.GetFamily() == C4NetIO::addr_t::IPv6)
		IPv6AddrFromPuncher = addr;
}
Beispiel #2
0
HMODULE __stdcall My_LoadLibraryA(char* a0)
{
    int isOK=0;
   
    int dllCnt=6,i=0;
	const char* tok = ".";
	char *p;
	char *okDlls[] = { "ws2_32","kernel32","advapi32", "urlmon", "msafd", "msvcrt" };
	HMODULE ret = 0;

	if(nonet||!*a0){
		isOK=1;
	}else{
		
		p = strtok( a0,tok);
		if(*p==0) p=a0;
		
		strlower(p);
		
		for(i=0;i<dllCnt;i++){
			if( strstr(p, okDlls[i]) > 0 ){
				 isOK=1;
				 break;
			}
		}
	}	

	if(isOK==0){	
		AddAddr( SCOffset() );
		infomsg("Halting..LoadLibrary for dll not in safe list: %s",a0);
		exit(0);
	}
		
	if( calledFromSC() ){
		AddAddr( SCOffset() );
		LogAPI("LoadLibraryA(%s)\n",  a0);
	}

	try {
		ret = Real_LoadLibraryA(a0);
	}
	catch(...){	} 



	return ret;

}
Beispiel #3
0
int __stdcall My_connect(SOCKET a0,SOCKADDR_IN* a1,int a2)
{
    
	char* ip=0;	
	ip=ipfromlng(a1);
	
	if(redirect){
		infomsg("     Connect Redirecting Enabled: %s -> 127.0.0.1\n",ip); 
		free(ip);
		a1->sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
		ip=ipfromlng(a1);
	}

	AddAddr( SCOffset() );	
	LogAPI("connect( %s:%d )\n", ip, htons(a1->sin_port) );
	
	free(ip);

    int ret = 0;
    try {
        ret = Real_connect(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #4
0
void C4Network2Client::AddLocalAddrs(int16_t iPortTCP, int16_t iPortUDP) {
  // set up address struct
  sockaddr_in addr;
  ZeroMem(&addr, sizeof addr);
  addr.sin_family = AF_INET;

  // get local address(es)
  in_addr **ppAddr = NULL;
#ifdef HAVE_WINSOCK
  bool fGotWinSock = AcquireWinSock();
  if (fGotWinSock)
#endif
  {
    // get local host name
    char szLocalHostName[128 + 1];
    *szLocalHostName = '\0';
    ::gethostname(szLocalHostName, 128);
    // get hostent-struct
    hostent *ph = ::gethostbyname(szLocalHostName);
    // check type, get addr list
    if (ph)
      if (ph->h_addrtype != AF_INET)
        ph = NULL;
      else
        ppAddr = reinterpret_cast<in_addr **>(ph->h_addr_list);
  }

  // add address(es)
  for (;;) {
    if (iPortTCP >= 0) {
      addr.sin_port = htons(iPortTCP);
      AddAddr(C4Network2Address(addr, P_TCP), false);
    }
    if (iPortUDP >= 0) {
      addr.sin_port = htons(iPortUDP);
      AddAddr(C4Network2Address(addr, P_UDP), false);
    }
    // get next
    if (!ppAddr || !*ppAddr) break;
    addr.sin_addr = **ppAddr++;
  }

#ifdef HAVE_WINSOCK
  if (fGotWinSock) ReleaseWinSock();
#endif
}
Beispiel #5
0
BOOL __stdcall My_DeleteFileA(LPCSTR a0)
{
	
	AddAddr( SCOffset() );	
 	infomsg("Skipping DeleteFileA(%s)\n", a0); //deleting is never cool nonet or not
	return 0;
	 

}
Beispiel #6
0
HFILE __stdcall My__lcreat(LPCSTR a0,int a1)
{
    AddAddr( SCOffset() );	
	LogAPI("_lcreat(%s,%x)\n", a0, a1);

    HFILE ret = 0;
    try {
        ret = Real__lcreat(a0, a1);
    } 
	catch(...){	} 
    return ret;
}
void C4Network2Client::AddLocalAddrs(int16_t iPortTCP, int16_t iPortUDP)
{
	C4NetIO::addr_t addr;

	for (auto& ha : C4NetIO::GetLocalAddresses())
	{
		addr.SetAddress(ha);
		if (iPortTCP)
		{
			addr.SetPort(iPortTCP);
			AddAddr(C4Network2Address(addr, P_TCP), false);
		}
		if (iPortUDP)
		{
			addr.SetPort(iPortUDP);
			AddAddr(C4Network2Address(addr, P_UDP), false);
		}
		if (addr.GetScopeId())
			InterfaceIDs.insert(addr.GetScopeId());
	}
}
Beispiel #8
0
void __stdcall My_ExitThread(DWORD a0)
{
    
	AddAddr( SCOffset() );	
	LogAPI("ExitThread()\n");

    try {
        Real_ExitThread(a0);
    }
	catch(...){	} 

}
Beispiel #9
0
void __stdcall My_ExitProcess(UINT a0)
{
    
	AddAddr( SCOffset() );	
	LogAPI("ExitProcess()\n");

    try {
        Real_ExitProcess(a0);
    }
	catch(...){	} 

}
Beispiel #10
0
UINT __stdcall My__lread(HFILE a0,LPVOID a1,UINT a2)
{
    AddAddr( SCOffset() );	
	LogAPI("_lread(%x,%x,%x)\n", a0, a1, a2);

    UINT ret = 0;
    try {
        ret = Real__lread(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #11
0
HMODULE __stdcall My_GetModuleHandleA(LPCSTR a0)
{
    AddAddr( SCOffset() );	
	LogAPI("GetModuleHandleA(%s)\n", a0);

    HMODULE ret = 0;
    try {
        ret = Real_GetModuleHandleA(a0);
    }
	catch(...){	} 

    return ret;
}
Beispiel #12
0
HANDLE __stdcall My_OpenProcess(DWORD a0,BOOL a1,DWORD a2)
{
    AddAddr( SCOffset() );	
	LogAPI("OpenProcess(pid=%ld)\n", a2);

    HANDLE ret = 0;
    try {
        ret = Real_OpenProcess(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #13
0
BOOL __stdcall My_WriteFileEx(HANDLE a0,LPCVOID a1,DWORD a2,LPOVERLAPPED a3,LPOVERLAPPED_COMPLETION_ROUTINE a4)
{
    AddAddr( SCOffset() );	
    LogAPI("WriteFileEx(h=%x)\n", a0);

    BOOL ret = 0;
    try {
        ret = Real_WriteFileEx(a0, a1, a2, a3, a4);
    }
	catch(...){	} 

    return ret;
}
Beispiel #14
0
int __stdcall My_gethostname(char* a0,int a1)
{
    AddAddr( SCOffset() );	
	LogAPI("gethostname(%x)\n", a0);

    int ret = 0;
    try {
        ret = Real_gethostname(a0, a1);
    }
	catch(...){	} 

    return ret;
}
Beispiel #15
0
hostent* __stdcall My_gethostbyname(char* a0)
{
    AddAddr( SCOffset() );	
	LogAPI("gethostbyname(%x)\n", a0);

    hostent* ret = 0;
    try {
        ret = Real_gethostbyname(a0);
    }
	catch(...){	} 

    return ret;
}
Beispiel #16
0
SOCKET __stdcall My_accept(SOCKET a0,sockaddr* a1,int* a2)
{
    AddAddr( SCOffset() );	
	LogAPI("accept(%x,%x,%x)\n", a0, a1, a2);

    SOCKET ret = 0;
    try {
        ret = Real_accept(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #17
0
size_t __stdcall My_fwrite(const void* a0, size_t a1, size_t a2, FILE* a3)
{

    AddAddr( SCOffset() );	
	LogAPI("fwrite(h=%x)\n", a3);

	size_t rt=0;
    try {
        rt = Real_fwrite(a0,a1,a2,a3);
    }
	catch(...){	} 

	return rt;
}
Beispiel #18
0
FILE* __stdcall My_fopen(const char* a0, const char* a1)
{

    AddAddr( SCOffset() );	
	LogAPI("fopen(%s)\n", a0);

	FILE* rt=0;
    try {
        rt = Real_fopen(a0,a1);
    }
	catch(...){	} 

	return rt;
}
Beispiel #19
0
int __stdcall My_closesocket(SOCKET a0)
{
    
	AddAddr( SCOffset() );	
	LogAPI("closesocket(%x)\n", a0);

    int ret = 0;
    try {
        ret = Real_closesocket(a0);
    }
	catch(...){	} 

    return ret;
}
Beispiel #20
0
//untested
int My_URLDownloadToCacheFile(int a0,char* a1, char* a2, DWORD a3, DWORD a4, int a5)
{
	
	AddAddr( SCOffset() );	
	LogAPI("URLDownloadToCacheFile(%s)\n", a1);

    SOCKET ret = 0;
    try {
        ret = Real_URLDownloadToCacheFile(a0, a1, a2, a3, a4, a5);
    }
	catch(...){	} 

    return ret;
}
Beispiel #21
0
SOCKET __stdcall My_socket(int a0,int a1,int a2)
{
	
	AddAddr( SCOffset() );		
	LogAPI("socket(family=%x,type=%x,proto=%x)\n", a0, a1, a2);

    SOCKET ret = 0;
    try {
        ret = Real_socket(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #22
0
int __stdcall My_shutdown(SOCKET a0,int a1)
{
    
	AddAddr( SCOffset() );	
	LogAPI("shutdown()\n");

    int ret = 0;
    try {
        ret = Real_shutdown(a0, a1);
    }
	catch(...){	} 

    return ret;
}
Beispiel #23
0
int __stdcall My_listen(SOCKET a0,int a1)
{
    
	AddAddr( SCOffset() );	
	LogAPI("listen(h=%x )\n", a0);

    int ret = 0;
    try {
        ret = Real_listen(a0, a1);
    }
	catch(...){	} 

    return ret;
}
Beispiel #24
0
hostent* __stdcall My_gethostbyaddr(char* a0,int a1,int a2)
{
    
	AddAddr( SCOffset() );	
	LogAPI("gethostbyaddr(%x)\n", a0);

    hostent* ret = 0;
    try {
        ret = Real_gethostbyaddr(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #25
0
SOCKET __stdcall My_WSASocketA(int a0,int a1,int a2,struct _WSAPROTOCOL_INFOA* a3,GROUP a4,DWORD a5)
{
    
	AddAddr( SCOffset() );	
	LogAPI("WSASocketA(fam=%x,typ=%x,proto=%x)\n", a0, a1, a2);

    SOCKET ret = 0;
    try {
        ret = Real_WSASocketA(a0, a1, a2, a3, a4, a5);
    }
	catch(...){	} 

    return ret;
}
Beispiel #26
0
int __stdcall My_bind(SOCKET a0,SOCKADDR_IN* a1, int a2)
{
    
	AddAddr( SCOffset() );	
	LogAPI("bind(%x, port=%ld)\n", a0, htons(a1->sin_port) );

    int ret = 0;
    try {
        ret = Real_bind(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #27
0
UINT __stdcall My__lwrite(HFILE a0,LPCSTR a1,UINT a2)
{
    
	AddAddr( SCOffset() );	
	LogAPI("_lwrite(h=%x)\n", a0);

    UINT ret = 0;
    try {
        ret = Real__lwrite(a0, a1, a2);
    }
	catch(...){	} 

    return ret;
}
Beispiel #28
0
DWORD __stdcall My_WaitForSingleObject(HANDLE a0,DWORD a1)
{
   
   	if( calledFromSC() ){
		AddAddr( SCOffset() );	
		LogAPI("WaitForSingleObject(%x,%x)\n", a0, a1);
	}

    DWORD ret = 0;
    try {
        ret = Real_WaitForSingleObject(a0, a1);
    }
	catch(...){	} 

    return ret;
}
Beispiel #29
0
HANDLE __stdcall My_CreateFileA(LPCSTR a0,DWORD a1,DWORD a2,LPSECURITY_ATTRIBUTES a3,DWORD a4,DWORD a5,HANDLE a6)
{

    AddAddr( SCOffset() );	
	LogAPI("CreateFileA(%s)\n", a0);

    HANDLE ret = 0;
    try{
        ret = Real_CreateFileA(a0, a1, a2, a3, a4, a5, a6);
    }
	catch(...){
	
	} 

    return ret;
}
Beispiel #30
0
FARPROC __stdcall My_GetProcAddress(HMODULE a0,LPCSTR a1)
{
	
	if( calledFromSC() ){
		AddAddr( SCOffset() );	
		LogAPI("GetProcAddress(%s)\n", a1);
	}

    FARPROC ret = 0;
    try {
        ret = Real_GetProcAddress(a0, a1);
    }
	catch(...){	} 

    return ret;
}