⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 335.htm

📁 unix高级编程原吗
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>CTerm非常精华下载</title>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0" height="577">
<tr><td width="32%" rowspan="3" height="123"><img src="DDl_back.jpg" width="300" height="129" alt="DDl_back.jpg"></td><td width="30%" background="DDl_back2.jpg" height="35"><p align="center"><a href="http://apue.dhs.org"><font face="黑体"><big><big>apue</big></big></font></a></td></tr>
<tr>
<td width="68%" background="DDl_back2.jpg" height="44"><big><big><font face="黑体"><p align="center">               ● UNIX网络编程                       (BM: clown)                </font></big></big></td></tr>
<tr>
<td width="68%" height="44" bgcolor="#000000"><font face="黑体"><big><big><p   align="center"></big></big><a href="http://cterm.163.net"><img src="banner.gif" width="400" height="60" alt="banner.gif"border="0"></a></font></td>
</tr>
<tr><td width="100%" colspan="2" height="100" align="center" valign="top"><br><p align="center">[<a href="index.htm">回到开始</a>][<a href="184.htm">上一层</a>][<a href="336.htm">下一篇</a>]
<hr><p align="left"><small>:发信人: scz (小四), 信区: Security <br>

:标  题: linuxtcp.c(修改) <br>

:发信站: 武汉白云黄鹤站 (Thu Oct 26 11:18:07 2000), 站内信件 <br>

/* <br>

 * File   : linuxtcp.c <br>

 * Version: <br>

 * Author : Anonymous ( Don't ask anything about this program, please. ) <br>

 * Complie: gcc -O3 -o lt linuxtcp.c <br>

 *        : strip lt <br>

 * Usage  : ./lt -h <br>

 * Date   : 2000-10-25 20:55 <br>

 * <br>

 */ <br>

/******************************************************************* <br>

 *                                                                 * <br>

 *                            Head File                            * <br>

 *                                                                 * <br>

 *******************************************************************/ <br>

#include <stdio.h> <br>

#include <stdlib.h> <br>

#include <strings.h> <br>

#include <sys/signal.h> <br>

#include <sys/socket.h> <br>



#include <sys/types.h> <br>

#include <netinet/in.h> <br>

#include <netinet/in_systm.h> <br>

#include <netdb.h> <br>

#include <netinet/ip.h> <br>

#include <netinet/tcp.h> <br>

#include <errno.h> <br>

#include <unistd.h> <br>

/******************************************************************* <br>

 *                                                                 * <br>

 *                            Macro                                * <br>

 *                                                                 * <br>

 *******************************************************************/ <br>

#define SUCCESS     0 <br>

#define FAILURE    -1 <br>

#define HIGHPORT    65535 <br>

#define LOWPORT     1 <br>

#define SYNSIZE     ( sizeof( struct iphdr ) + sizeof( struct tcphdr ) ) <br>

typedef void Sigfunc ( int );  /* for signal handlers */ <br>

/******************************************************************* <br>

 *                                                                 * <br>

 *                       Static Global Var                         * <br>



 *                                                                 * <br>

 *******************************************************************/ <br>

struct sockaddr_in  server; <br>

struct in_addr      serverIp    = { 0 }; <br>

struct in_addr      clientIp    = { 0 }; <br>

u_short             clientPort  = 1977; <br>

int                 sendSocket  = -1; <br>

int                 recvSocket  = -1; <br>

u_short             ports[ HIGHPORT + 1 ]; <br>

int                 portIndex; <br>

u_short             lowPort     = LOWPORT; <br>

u_short             highPort    = HIGHPORT; <br>

/******************************************************************* <br>

 *                                                                 * <br>

 *                        Function Prototype                       * <br>

 *                                                                 * <br>

 *******************************************************************/ <br>

void      Atexit      ( void ( * func ) ( void ) ); <br>

void      Close       ( int fd ); <br>

u_short   in_cksum    ( u_short * addr, int len ); <br>

u_long    resolveHost ( char * host ); <br>

int       sendSyn     ( u_long sourceIp, u_short sourcePort, u_long seqNum, <br>



u_lo <br>

ng ackNum, struct sockaddr_in * dest ); <br>

void      sig_end     ( int signo ); <br>

Sigfunc * signal      ( int signo, Sigfunc * func ); <br>

Sigfunc * Signal      ( int signo, Sigfunc * func );  /* for our signal() fu <br>

ncti <br>

on */ <br>

int       Socket      ( int family, int type, int protocol ); <br>

int       synScan     ( u_long sourceIp, u_short sourcePort, u_short lowPort <br>

, u_ <br>

short highPort, struct sockaddr_in * dest ); <br>

void      terminate   ( void ); <br>

void      usage       ( char * arg ); <br>

/*----------------------------------------------------------------------*/ <br>

void Atexit ( void ( * func ) ( void ) ) <br>

{ <br>

    if ( atexit( func ) != 0 ) <br>

    { <br>

        perror( "atexit" ); <br>

        exit( FAILURE ); <br>

    } <br>

    return; <br>

    return; <br>

}  /* end of Atexit */ <br>

void Close ( int fd ) <br>

{ <br>

    if ( close( fd ) == -1 ) <br>

    { <br>

        perror( "close" ); <br>

        exit( FAILURE ); <br>

    } <br>

    return; <br>

}  /* end of Close */ <br>

u_short in_cksum ( u_short * addr, int len ) <br>

{ <br>

    int       nleft  = len; <br>

    int       sum    = 0; <br>

    u_short * w      = addr; <br>

    u_short   answer = 0; <br>

    /* <br>

     * Our algorithm is simple, using a 32 bit accumulator (sum), we add <br>

     * sequential 16 bit words to it, and at the end, fold back all the <br>

     * carry bits from the top 16 bits into the lower 16 bits. <br>

     */ <br>

    while ( nleft > 1 ) <br>



    { <br>

        sum   += *w++; <br>

        nleft -=  2; <br>

    } <br>

    /* 4mop up an odd byte, if necessary */ <br>

    if ( nleft == 1 ) <br>

    { <br>

        *( unsigned char * )(&answer) = *( unsigned char * )w ; <br>

        sum += answer; <br>

    } <br>

    /* 4add back carry outs from top 16 bits to low 16 bits */ <br>

    sum     = ( sum >> 16 ) + ( sum & 0xffff ); /* add hi 16 to low 16 */ <br>

    sum    += ( sum >> 16 );  /* add carry */ <br>

    answer  = ~sum;  /* truncate to 16 bits */ <br>

    return( answer ); <br>

}  /* end in_cksum */ <br>

u_long resolveHost ( char * host ) <br>

{ <br>

    struct hostent * he; <br>

    unsigned long    ip; <br>

    if( ( he = gethostbyname( host ) ) == NULL ) <br>

    { <br>

    { <br>

        ip = inet_addr( host ); <br>

        if ( ip == INADDR_NONE ) <br>

        { <br>

            fprintf( stderr, "Unknown host %s\n", host ); <br>

            exit( FAILURE ); <br>

        } <br>

    } <br>

    else <br>

    { <br>

        memcpy( &ip, he->h_addr_list[0], sizeof( unsigned long ) ); <br>

    } <br>

    return( ip );  /* network */ <br>

}  /* end of resolveHost */ <br>

int sendSyn ( u_long sourceIp, u_short sourcePort, u_long seqNum, u_long ack <br>

Num, <br>

 struct sockaddr_in * dest ) <br>

{ <br>

    u_char          packet[ SYNSIZE ]; <br>

    struct iphdr *  ip; <br>

    struct tcphdr * tcp; <br>

    u_char *        pPseudoHead; <br>

    u_char          pseudoHead[ 12 + sizeof( struct tcphdr ) ]; <br>



    u_short         tcpHeadLen;  /* network */ <br>

    memset( packet, 0, SYNSIZE ); <br>

    ip           = ( struct iphdr * )packet; <br>

    ip->ihl      = 5; <br>

    ip->version  = 4; <br>

    ip->tos      = 0; <br>

    ip->tot_len  = htons( SYNSIZE ); <br>

    ip->id       = htons( 1977 + ( rand() % 32768 ) ); <br>

    ip->frag_off = 0; <br>

    ip->ttl      = 255; <br>

    ip->protocol = IPPROTO_TCP; <br>

    ip->check    = 0; <br>

    ip->saddr    = sourceIp; <br>

    ip->daddr    = dest->sin_addr.s_addr; <br>

    tcpHeadLen   = htons( sizeof(struct tcphdr) );  /* network */ <br>

    tcp          = (struct tcphdr *)( packet + sizeof( struct iphdr ) ); <br>

    tcp->source  = htons( sourcePort ); <br>

    tcp->dest    = dest->sin_port; <br>

    tcp->seq     = htonl( seqNum ); <br>

    tcp->ack_seq = htonl( ackNum ); <br>

    tcp->doff    = 5; <br>

    tcp->syn     = 1; <br>



    tcp->window  = htons( 8192 ); <br>

    tcp->check   = 0; <br>

    tcp->urg_ptr = 0; <br>

    pPseudoHead  = pseudoHead; <br>

    memset( pPseudoHead, 0, sizeof( pseudoHead ) ); <br>

    memmove( pPseudoHead, &( ip->saddr ), 8 ); <br>

    pPseudoHead += 9; <br>

    memmove( pPseudoHead, &( ip->protocol ), 1 ); <br>

    pPseudoHead++; <br>

    memmove( pPseudoHead, &tcpHeadLen, 2 ); <br>

    pPseudoHead += 2; <br>

    memmove( pPseudoHead, tcp, sizeof( struct tcphdr ) ); <br>

    tcp->check   = in_cksum( ( u_short * )pseudoHead, sizeof( pseudoHead ) ) <br>

; <br>

    return( sendto( sendSocket, packet, SYNSIZE, 0, ( struct sockaddr * )des <br>

t, s <br>

izeof( struct sockaddr_in ) ) ); <br>

}  /* end of sendSyn */ <br>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -