Ejemplo n.º 1
0
/* --- 解析HTTP报文头,并与目标服务器建立连接 --- */
int HttpConnect(int nLocalSock, int *nRemoteSock)
{
	char szIp[30], buf[4096];
	int nread;	
	memset(buf,0,sizeof(buf));
											/* 接收网页浏览端发送的数据请求 */
	while ((nread = read(nLocalSock, buf, sizeof(buf))) < 0) 
	{	
		if (errno != EINTR)					/* 信号导致read中断,继续接收 */
		{
			perror("read");					/* 其它错,结束子进程 */
			return 1;				
		}
	}
	memset(szIp, 0, sizeof(szIp));
	/* 解析HTTP报文,简单验证报文,并获取目标服务器的IP地址 */
	if (GetObjectIp(buf, szIp) != 0) return 2;
	/* 连接目标服务器,端口80(网页浏览端口) */
	if (!VERIFY(ConnectSock(nRemoteSock, 80, szIp) == 0))
	{									
		PrintLog(stderr, "Connect Server Fail,Addr[%s]", szIp);
		return 3; 							/* 连接目标端失败,结束子进程 */
	}
	if (WriteFile(*nRemoteSock, buf, nread) != 0)			/* 转发数据 */
	{
		PrintLog(stderr, "Write message to server error[%d]", nread);
		perror("write");					/* 数据转发失败,结束子进程 */
		return 4;
	}	
	return 0;								/* 成功返回 */
}
Ejemplo n.º 2
0
int main(int argc, char **argv)
{
  int server_sock, session_sock;
  
  if (argc > 1) TestInit(0);

  server_sock = OpenUDPSocket( 1701 );
  session_sock = OpenPPPoL2TPSocket();

  /* Try sending packets first to see if that helps */
  // SendRawPacket( server_sock, 1701, control_packet, sizeof( control_packet ) );
  // SendRawPacket( server_sock, 1701, data_packet,    sizeof( data_packet    ) );

  fcntl( server_sock, F_SETFL, O_NONBLOCK );
  fcntl( session_sock, F_SETFL, O_NONBLOCK );
  
  CheckPipe( server_sock );
  
  ConnectSock( session_sock, server_sock, 1701, 1, 2, 3, 4 );

  system( "./subtest-proc" );
  
  SendRawPacket( server_sock, 1701, control_packet, sizeof( control_packet ) );
  SendRawPacket( server_sock, 1701, data_packet,    sizeof( data_packet    ) );

  system( "./subtest-proc" );

  CheckPipe( server_sock );
  CheckPipe( session_sock );

  system( "./subtest-proc" );
  
  /* Close session socket first, because other way round breaks right now */  
  TestPrintf( "Closing session socket\n" );  
  close( session_sock );
  TestPrintf( "Closing server socket\n" );  
  close( server_sock );
  
  return 0;
}
Ejemplo n.º 3
0
int main(int argc, char **argv)
{
  int server_sock1, session_sock1;
  int server_sock2, session_sock2;
  
  if (argc > 1) TestInit(0);

  server_sock1 = OpenUDPSocket( 1701 );
  session_sock1 = OpenPPPoL2TPSocket();

  server_sock2 = OpenUDPSocket( 1702 );
  session_sock2 = OpenPPPoL2TPSocket();

#if 0
  /* Try sending packets first to see if that helps */
  SendTestPacket( server_sock1, 1702 );
  SendTestPacket( server_sock2, 1701 );
#endif

  fcntl( server_sock1,  F_SETFL, O_NONBLOCK );
  fcntl( session_sock1, F_SETFL, O_NONBLOCK );
  fcntl( server_sock2,  F_SETFL, O_NONBLOCK );
  fcntl( session_sock2, F_SETFL, O_NONBLOCK );

  fcntl( server_sock1,  F_SETFD, FD_CLOEXEC );
  fcntl( session_sock1, F_SETFD, FD_CLOEXEC );
  fcntl( server_sock2,  F_SETFD, FD_CLOEXEC );
  fcntl( session_sock2, F_SETFD, FD_CLOEXEC );

  CheckPipe( server_sock1 );
  CheckPipe( server_sock2 );
    
  ConnectSock( session_sock1, server_sock1, 1702, 1, 2, 3, 4 );
  ConnectSock( session_sock2, server_sock2, 1701, 3, 4, 1, 2 );

  system( "./subtest-proc" );
  
  SendTestPacket( session_sock1, 1702 );
  SendTestPacket( session_sock2, 1701 );

  system( "./subtest-proc" );

  CheckPipe( server_sock1 );
  CheckPipe( session_sock1 );
  CheckPipe( server_sock2 );
  CheckPipe( session_sock2 );
  
  if (argc == 0)
  {
    StartLoopingFunction( session_sock1, 0, 0 );
    StartLoopingFunction( session_sock2, 0, 0 );
    StartLoopingFunction( server_sock1, 1702, 0 );
    StartLoopingFunction( server_sock2, 1701, 0 );
  }
  else
  {
    StartLoopingFunction( session_sock1, 0, 1000 );
    StartLoopingFunction( session_sock2, 0, 2000 );
    StartLoopingFunction( server_sock1, 1702, 3000 );
    StartLoopingFunction( server_sock2, 1701, 4000 );
  }

  if (argc == 0) 
  {
    char buf[16];
    fprintf( stdout, "Press any key to continue\n" );
    fgets( buf, 10, stdin );
  } 
  else 
  {
    fprintf(stdout, "Waiting 60 seconds...\n");
    sleep(60);
  }

  system( "./subtest-proc" );

  TestPrintf( "Closing server2 socket\n" );  
  close( server_sock2 );
  TestPrintf( "Closing session2 socket\n" );  
  close( session_sock2 );
  TestPrintf( "Closing session1 socket\n" );  
  close( session_sock1 );
  TestPrintf( "Closing server1 socket\n" );  
  close( server_sock1 );
  
  return 0;
}
Ejemplo n.º 4
0
void ZZZ() {ConnectSock();};