Skip to content

Wargames

November 6, 2006

Хэрэвээ та код ШелСкрип сонирхдог бичдэг бол Wargames тоглоод үзээрэй. Маш сонирхолтой.
Wargame-үүд нь жинхэнэ амьдралд тохиож болох алдаатай програмын цуглуулга бөгөөд аюулгүй байдал, нууцлал, програмчлал сонирхсон хэн бүхэн уг алдааг олж дараа дараагийн үеүүд уруу орох замаар эрдэм мэдлэгээ сайжруулж болох тоглоомууд юм. Ажил, хичээлийнхээ зав чөлөөгөөр тархиа жаахан ажиллуулаад ухаанаа сорьё гэвэл “тоглоод” үээрэй :)

1-р шат

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h> /* memset() */
#include <sys/time.h> /* select() */

int read_int(int sd)
{
       char buff[4];
       int r;
       int i;

       for(i=0;i < 4;i++)
       {
               if(recv(sd, &buff[i], 1, 0) < 0)
               {
                       perror(“recv”);
                       exit(-1);
               }
       }

       memcpy(&r, buff, 4);
       return r;
}

int main(int argc, char *argv[]) {
        int sd, rc, i;
        struct sockaddr_in sin;
        struct hostent *h;
        int nums[4];
        int r;
        char buff[1024];
       
        /* check command line args */
        if(argc<2) {
               printf(“usage : %s <server>\n”, argv[0]);
               exit(1);
        }
       
        /* get server IP address (no check if input is IP address or DNS name */
        h = gethostbyname(argv[1]);
        if(h==NULL) {
                printf(“%s: unknown host ‘%s’ \n”, argv[0], argv[1]);
                exit(1);
        }
       
        sin.sin_family = h->h_addrtype;
        memcpy((char *) &sin.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
        sin.sin_port = htons(5842);
       
        /* socket creation */
        sd = socket(AF_INET,SOCK_STREAM, 0);
        if(sd<0) {
                perror(“socket”);
        }
       
        // connect(int s, const struct sockaddr *name, socklen_t namelen);
        if(connect(sd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
        {
                perror(“connect”);
                exit(-1);
        }
       
        nums[0] = read_int(sd);
        nums[1] = read_int(sd);
        nums[2] = read_int(sd);
        nums[3] = read_int(sd);
        
        printf(“read in %d %d %d %d\n”, nums[0], nums[1], nums[2], nums[3]);
        r = nums[0] + nums[1] + nums[2] + nums[3];
        printf(“sending result %d\n”, r);
        send(sd, &r, sizeof(int), 4);
        r = recv(sd, buff, 1023, 0);
        buff[r] = 0;
        printf(“server returned %s\n”, buff);
        close(sd);
}

  • Username: level1
  • Password: Gq#qu3bF32,3,4,5…… үргэлжлэлийг http://www.mnbsd.org/wiki/index.php/PullThePlug_Wargames хаягаар орж сонирхоно уу…
    Эхийг : www.unix.mn 
  • No comments yet

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s

    %d bloggers like this: