네트워크 - 해당되는 글 20건

      네트워크  |  2008. 1. 14. 01:00




// 파일을 오픈 한다.
$fp = fopen($file, "rb"); 
// 파일 포인터 이동
fseek($fp,$seek_start);
// 다운로드 헤더를 보내고
 header("Cache-control: private");
 header("Content-Type: application/octet-stream"); 
 header("Content-Length: ".$filesize-$seek_start);
 header("Content-Disposition: filename=".$filename); 

// 파일을 보내보자!!
while(!feof($fp)) { 
    set_time_limit(0); 
    echo fread($fp,round(1024*$speed));
    flush();
        sleep(1);
}
fclose($fp);
?>
/* sep_server2.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>

#define BUFSIZE 1024
void error_handling(char *message);

int main(int argc,char **argv){
 int serv_sock;
 int clnt_sock;

 FILE* rstrm;
 FILE* wstrm;

 struct sockaddr_in serv_addr;
 struct sockaddr_in clnt_addr;
 int clnt_addr_size;
 char buf[BUFSIZE];

 if(argc!=2){   //실행시 포트번호를 입력하지 않으면, 에러핸들러로 메시지 전달 후 종료
  printf("Usage : %s \n",argv[0]);
  exit(1);
 }

 serv_sock=socket(PF_TNET, SOCK_STREAM, 0); //socket() 함수를 이용한 서버용 소켓//생성
 if(serv_sock == -1)  // socket()함수의 리턴값이 -1이면, 생성실패!
  error_handing("socket() error");              //에러처리!
 

 memset(&serv_addr, 0, sizeof(serv_addr));
 serv_addr.sin_family=AF_INET;                               //주소바인딩
 serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); //
 serv_addr.sin_port=htons(atoi(argv[1]));                // 실행시 인자값을 이용해서, 포트생성

 if( bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1) // 소켓과 생성된 주소를 바인딩
  error_handling("bind() error"); //에러처리

 if(listen(serv_sock, 5)==-1)  // 포트의 능동적 대기(=클라이언트로 부터의) 숫자 5는 최대 //허용수
  error_handling("listen() error");
 clnt_addr_size=sizeof(clnt_addr);     //접속한 클라이언트가 보낼 클라이언트의 주소를 담
                                              //기 위한 변수 준비, 주소 공간만큼
 clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); // 클라이언트의 접속 수용(이때 클라이언트의 소켓정보가 넘어옴)
 if(clnt_sock==-1)    //클라이언트의 소켓정보가 -1일경우, 클라이언트 소켓의 생성실패!
  error_handling("accept() error");

 /*입력 스트림 생성 */
 rstrm = fdopen(clnt_sock, "r");

 /* 디스크립터 복사후 출력 스트림 생성 */
 wstrm = fdopen(dup(clnt_sock, "w");

 /*메세지 전송*/
 fputs("From Server : Hello?\n", wstrm);
 fputs("I like network programming\n", wstrm);
 fputs("I like socket programming\\nn", wstrm);
 fflush(wstrm);

 /*1차 종료,EOF 메시지 전송*/
 shutdown(fileno(wstrm),SHUT_WR);
 fclose(wstrm);

 /*메시지 수신*/
 fgets(buf, sizeof(buf), rstrm);
 fputs(buf, stdout);

 /*2차 종료(완전 종료)*/
 fclose(rstrm);
 return 0;
}

void error_handling(char *message){

 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}
==========================================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>

#define BUFSIZE 1024
void error_handling(char *message);

int main(int argc,char **argv){

 int sock;

 FILE* rstrm;
 FILE* wstrm;
 char buf[BUFSIZE];

 struct sockaddr_in serv_addr;
 
 if(argc!=3){   //실행시 포트번호를 입력하지 않으면, 에러핸들러로 메시지 전달 후 종료
  printf("Usage : %s <ip> <port>\n",argv[0]);
  exit(1);
 }

 sock=socket(PF_TNET, SOCK_STREAM, 0); //socket() 함수를 이용한 서버용 소켓//생성
 if(serv_sock == -1)  // socket()함수의 리턴값이 -1이면, 생성실패!
  error_handing("socket() error");              //에러처리!
 

 memset(&serv_addr, 0, sizeof(serv_addr));
 serv_addr.sin_family=AF_INET;                               //주소바인딩
 serv_addr.sin_addr.s_addr=inet_addr(argv[1]); //
 serv_addr.sin_port=htons(atoi(argv[2]));

 if( connect(sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr))==-1) // 소켓과 생성된 주소를 컨넥트
  error_handling("connect() error"); //에러처리
 rstrm = fdopen(sock, "r");
 wstrm = fdopen(sock, "w");

 while(1){
  if(fgets(buf, sizeof(buf), rstrm)==NULL) break;
  fputs(buf, stdout);
  fflush(stdout);
 }

 /*인사 메세지 전송 */
 fputs("FROM CLIENT : THANKS YOU!\n",wstrm);
 fflush(wstrm);

 fclose(wstrm);
 fclose(rstrm);
 retrun 0;
}

void error_handling(char *message){

 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}

      네트워크  |  2008. 1. 5. 16:57




telnet

telnet 서버에 접속하는 명령이다.

        ]# telnet 호스트명|IP주소 [PORT번호]


ssh

ssh서버에 접속하는 명령이다.

        ]# ssh [-l 계정] 호스트명

        ]# ssh 계정@호스트명


scp

ssh서버에 파일을 업로드하거나 다운로드 하는 명령이다.

        ]# scp 업로드파일 계정@호스트명:경로

        ]# scp 계정@호스트명:경로 다운로드위치


ftp

ftp 접속명령이다.

        ]# ftp 호스트명

        ! : 잠시 쉘로 나감
        dir <dir>              : ls명령과 동일
        put <file>             : 지정파일 업로드
        get <file>             : 지정파일 다운로드
        sie <file>             : 지정파일의 크기출력
        mkdir <dir>          : 디렉토리생성
        pwd                   : 원격디렉토리의 현재경로출력
        status                 : 현재상황을 출력
        exit                    : ftp서버로부터 빠져나온다.
        quit                    : exit명령과 동일
        mput <file1 file2>  : 여러개의 파일을 동시에 업로드
        mget <file1 file2>  : 여러개의 파일을 동시에 다운로드
        cd <dir>             : 디렉토리 이동
        nlist <dir>           :    원격의 FTP 서버에 있는 파일목록을 출력한다.
        rename <name1 name2> : name1의 이름을 name2로 변경한다.
        chmod <nnn>     : 파일의 퍼미션을 변경한다.
        open <ftp host>  : 지정한 호스트의 ftp서버에 연결한다.
        ls                     : 디렉토리의 파일목록을 출력한다.
        rmdir <dir>         : 지정한 디렉토리를 삭제한다.
        ? [command]     : 명령목록을 출력하거나 지정명령의 도움말을 출력한다.
        delete <file>       : 지정한 파일을 삭제한다.
        mdelete <file1 file2> : 여러개의 파일을 동시에 삭제한다.
        passive             : 파일의 전송모드를 변경한다.


ifconfig

네트워크의 인터페이스 명령어로 네트워크를 설정하거나 네트워크 정보를 확인하는 명령이다.

        ]# ifconfig 인터페이스명

        ]# ifconfig 인터페이스명 up|down

        ]# ifconfig 인터페이스명 IP주소 netmask <netmask값> broadcast <broadcat값> [up]

아래는 eth0 인터페이스의 알리아스방법이다.

        ]# ifconfig eth0:1 192.168.0.154 netmask 255.255.255.0 broadcast 192.168.0.255 up

        ]# ifconfig eth0:1


nslookup

네임서버 질의도구이다.

        ]# nslookup [<hostname|IP주소>] [nameserver]

nslookup명령은 다음과 같은 명령을 이용하여 대화실 질의가 가능하다.

        ]# nslookup
        > NAME : 기본 네임 서버를 통하여 NAME host/domain 정보를 출력한다.
        > NAME1 NAME2 : 앞과 동일하나 NAME2서버를 통해서 NAME1의 정보를 출력
        > help 또는 ? : 도움말을 출력한다.
        > set all : 현재 네임서버와 호스트, 그리고 옵션을 출력한다.
        > set domain=NAME : 질의시 사용할 기본 도메인을 지정한다.
        > set querytype=X : X에는 A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT,
                                   WKS, SRV, NAPTR 등이 쓰일 수 있다.
        > set type=X : set querytype=X와 동일하다.
        > server NAME : 기본 네임서버를 NAME으로 변경하여 이 NAME서버를 이용하여
                                질의한다.
        > lserver NAME :    /etc/resolv.conf 파일에 있는 기본서버를 바꾼다.
        > ls -a DOMAIN > FILE : DOMAIN에 대해 CNAME과 관련된 내용을 로컬 시스템의
                                            FILE로 저장한다.
        > ls -d DOMAIN : DOMAIN에 대한 모든 리스트를 출력한다.
        > ls -t TYPE DOMAIN : TYPE에는 A, CNAME, MX 등의 레코드명이 쓰이며 해당 도
                                         메인에 레코드에 대한 정보를 출력한다.
        > exit 또는 Ctrl + D : nslookup명령을 종료한다.


dig

nslookup과 같은 네임서버 질의도구이다. dig는 Domain Information Groper의 약자이다.

        ]# dig [@nameserver] domain [<query-type>] [<query-class>] [+<query-option>]
                 [-<query-option>]

        @nameserver : 질의할 네임서버를 지정한다.
        domain          : 질의할 도메인이나 질의할 타입에 대한 호스트를 지정한다.
        query-type     : 질의할 DNS유형을 설정한다. 여기에는 레코드명이 쓰인다.
        query-class   : 질의할 클래스를 지정하는 옵션으로 IN(Internet Class)와 ANY
                           (any/all)클래스가 쓰인다.
        +query-option : 추가할 질의 옵션을 설정한다.
        -query-type    : query-type과 같다.
        -x dot-ip-address : IP주소에 대한 역변환 질의 옵션이다.

        ]# dig @ns.linux.ac.kr www.linux.ac.kr A
            ; ns.linux.ac.kr 네임서버를 이용하여 www.linux.ac.kr 호스트의 A레코드에 대한
              호스트 정보출력

        ]# dig @ns.linux.ac.kr -x 192.168.1.254
            ; IP 주소를 이용하여 호스트의 정보를 출력

        ]# dig -t NS linux.ac.kr
           ; linux.ac.kr도메인의 네임서버를 찾는다

        ]# dig -t SOA
http://www.linux.ac.kr/
           ; 해당 호스트의 SOA에 대한 영역의 출력

※ 참고 : named.ca 파일 만들기

        ]# dig . NS > named.ca


host

        # host [옵션] [-c Class] [-t type] [-W wait] name server

옵션
 
        -C                : SOA영역의 값을 출력한다.
        -c class        : class는 인터넷 클래스 설정부분으로 기본값은 IN이다.
        -d, -v            : 좀더 자세한 내용을 출력한다.
        -T                 : tcp 접속을 사용한다.
        -t type           : dig의 -t query-type 과 동일하다.
        -w, -W wait   : 응답을 기다리는 시간을 지정한다.
        name            : 질의할 호스트의 이름이나 IP주소를 지정한다.
        server           : 질의할 네임서버를 지정한다.


ping

네트워크의 연결확인 명령이다.

        ]# ping [-c 갯수] [-i 초] [-s 패킷의크기] [-w 초] <대상호스트|IP>

     [옵션]

        -c 갯수           : 보낼 패킷의 갯수를 지정하는 부분이다.
        -i 초               : 몇 초 간격으로 패킷을 보낼것인지를 지정한다.
        -s 패킷의크기 : 전송할 패킷의 크기를 지정하며 기본값은 56Byte이다.
                            이때 전송되는 값은 패킷에 ICMP해더 8Byte를 더한 64Byte이다.
                            지정가능한 패킷의 최대의 크기는 65,507Byte이다.
        -w 초             : 패킷을 보낸 후 몇초후에 실행을 멈출것인지를 지정하는 옵션이나
                            -c 옵션을 이용하여 패킷의 갯수를 지정할 경우 이 옵션은 의미없다.

ping명령실행시 출력되는 정보

        icmp_seq=n     : n은 ICMP ECHO_REQUEST 패킷에 대한 일련번호이다.
        ttl=nnn             : time to live의 의미로써 nnn은 ICMP ECHO_REQUEST 패킷이 라우
                             터나 게이트웨이 하나를 통과할 때 마다 1씩감소한다. 즉 전송한 패
                             킷이 생존할 수 있는 주기라고 할 수 있다. UNIX 시스템의 기본 ttl값
                             은 255이다.
        time=xx ms, time=xx usec : 패킷을 보내고 받는 왕복시간을 기록하는 항목이다.
                                        ms는 1/1,000초를 말하며 usec는 1/1,000,000초를 의미한다.

   ; ping명령을 사용하여 특정호스트의 네트워크 상태를 검사할때 time값이 적으면 적을
  수록 통신상태가 양호하다고 할 수 있다.


route

자신의 시스템에 구성되어있는 routing table을 확인하는 명령이다.

사용방법

        가. 라이팅 테이블을 확인한다.

                ]# route -n

        나. 라우팅 정보 추가

                ]# route add -net <네트워크주소> netmask <넷마스크> dev <인터페이스명>

        다. 라우팅정보의 삭제

                ]# route del -net <네트워크주소> netmask <넷마스크> [dev <인터페이스명>]

        라. 기본 게이트웨이의 추가

                ]# route add default gw <게이트웨이주소> <인터페이스명>

        마. 기본 게이트웨이의 삭제

                ]# route del default gw <게이트웨이주소> <인터페이스명>


netstat

네트워크의 연결상태를 확인하는 명령이다.

        # netstat [옵션]

netstat의 옵션은 다음과 같다.

        -r : 라우팅 테이블을 출력한다.
        -i : 인터페이스 테이블을 출력한다.
        -s : SNMP와 같은 네트워크 통계를 출력한다.
        -p : 소켓에 대한 PID프로그램을 출력한다.
        -c : 계속되는 리스트로 출력한다.
        -a : 연결된 모든 소켓을 출력한다.


traceroute

원격호스트의 경로추적 확인

        # traceroute <대상호스트|IP주소>


hostname

호스트네임 설정

        # hostname <HOSTNAME>

호스트네임 정보출력

        # hostname [옵션] <HOSTNAME>

        -v : 호스트네임을 출력
        -d : DNS도메인 네임을 출력
        -f : 완전한 호스트의 이름을 출력(FQDN)
        -a : 호스트 네임에 대한 Alias이름을 출력한다.
        -i : 호스트 네임에 대한 IP주소를 출력한다
      네트워크  |  2007. 11. 8. 10:33



sokoban's Blog is powered by Daum & Tattertools