Search

'분류 전체보기'에 해당되는 글 566건

  1. 2016.03.15 Visual Studio 6.0 C++ 불러오기 오류(msdev.exe)
  2. 2016.03.15 ocx, dll 라이브러리 등록
  3. 2016.03.09 JDBC Realm 1
  4. 2016.03.08 성동구 인근 지역 프로그래밍 과외 합니다.
  5. 2016.03.07 Domain, WorkGroup ?
  6. 2016.03.07 Winpcap Tes 09
  7. 2016.03.07 Winpcap Sniffing Link
  8. 2016.03.07 Winpcap Test 08
  9. 2016.03.07 Winpcap Test 07
  10. 2016.03.07 Winpcap Test 06
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Visual Studio 6.0 C++ 불러오기 오류가 발생한다면...


Visual Basic 6.0, Visual C++ 6.0 및 Visual Source Safe 6.0d용 서비스 팩 6



ocx, dll 라이브러리 등록

Programming/COM,ATL 2016. 3. 15. 15:10 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

ocx, dll 라이브러리 등록


등록할 라이브러리를 32비트 운영체제의 경우 system32,


64비트 운영체제의 경우 syswow64에 넣어준다음


관리자권한 cmd.exe 에서


regsvr32 등록할라이브러리



JDBC Realm

Programming/JAVA,JSP 2016. 3. 9. 14:16 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

테이블 생성


CREATE TABLE Users (

 username VARCHAR ( 25 ) NOT NULL,

 password VARCHAR ( 25 ) NOT NULL,

 enabled  VARCHAR ( 5 ) DEFAULT 'true',

 CONSTRAINT pk_users PRIMARY KEY (username)

);

 CREATE TABLE Authorities (

  username varchar(15) not null,

  authority varchar(15) not null,

  primary key (username, authority)

);


테이블을 만들고, 데이터를 입력한 뒤에 Spring의 context 설정을 변경한다.

테이터 입력시 주의할 점은 authority 컬럼 값으로 사용할 Role 에 대한 문자열은

대소문자를 구별하기 때문에 이를 유의해야 할 필요가 있다.

일반적으로 ROLE_ 을 접두어로 많이 쓰기 때문에

대문자로 입력하는 것이 좋을 것 같다.


INSERT INTO USERS VALUES('younghoe', 'info', 'true');

INSERT INTO AUTHORITIES VALUES('younghoe', 'ADMIN');


테이블 구조가 위와 같으면 별다른 설정이 필요없다.

테이블 구조가 다르면.. 프로퍼티 설정 변경만으로 수정이 가능하지만

ORM 도구로 JDBC 를 대신하려고 하는 경우는 코드 수정이 필요할 것이다.

 


<!-- UserDetailsService  -->

<bean id="jdbcDaoImpl" 

         class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">

   <property name="dataSource"><ref bean="dataSource"/></property>

   <property name="rolePrefix" value="ROLE_" />

</bean>

 

물론 dataSource 에 대한 정의가 spring-context 어딘가엔 정의되어 있어야 한다.

 

<bean id="dataSource"

         class="org.apache.commons.dbcp.BasicDataSource"

         destroy-method="close">

   <property name="driverClassName" value="${jdbc.driverClassName}" />

   <property name="url" value="${jdbc.url}" />

   <property name="username" value="${jdbc.username}" />

   <property name="password" value="${jdbc.password}" />

</bean>

 

UserDetailsService  구현 클래스를 변경했으니

이를 사용하는 daoAuthenticationProvider 의 프로퍼티 값도 변경해야 한다.

 

<!-- DAO Authentication Provider -->

<bean id="daoAuthenticationProvider"

         class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">

    <property name="userDetailsService" ref="jdbcDaoImpl" />

</bean>

 

이제 메모리 Map 대신에 JDBC 를 사용하여 인증을 수행할 수 있다.


<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>jdbcRealm</realm-name>
    <form-login-config>
        <form-login-page>/login.xhtml</form-login-page>
        <form-error-page>/login.xhtml</form-error-page>
    </form-login-config>
</login-config>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secure Pages</web-resource-name>
        <description/>
        <url-pattern>/admin/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>ADMINS</role-name>
    </auth-constraint>
</security-constraint>
<security-role-mapping>
    <role-name>USERS</role-name>
    <group-name>USERS</group-name>
</security-role-mapping>
<security-role-mapping>
    <role-name>ADMINS</role-name>
    <group-name>ADMINS</group-name>
</security-role-mapping>


'Programming > JAVA,JSP' 카테고리의 다른 글

Web Browser 점유율 통계  (0) 2016.04.18
Activex Event use in JavaScript  (0) 2016.04.14
ImageFrameTest  (0) 2016.02.05
Java 채팅 프로그램  (0) 2016.02.04
Java 채팅 소스 예제 #1  (0) 2016.02.04
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

지역 : 서울 성동구 인근


종목 : 프로그래밍, 정보올림피아드, CCNA, CCNP


경력 : 지도학생) 2013 초등부 정보올림피아드 전국대회 은상 수상

        지도학생) 정보올림피아드 본선 진출 다수


         전) 서울 서울특별시립종합직업전문학교 외부강사

         전) 천안 그린컴퓨터학원 프로그래밍 강사

         전) 한국기술교육대학교 대학원 컴퓨터공학부 박사과정 수료

         전) 청주 그린컴퓨터학원 프로그래밍 강사

         전) 아산소재 대학교 시간강사

         전) 천안소재 대학교 시간강사



         현) 한국기술교육대학교 평생능력개발 이러닝 운영강사

         현) IT기업 연구소 재직중




자세한 문의는


tansanc23@gmail.com 으로 문의해 주세요.

공일공-구구육이-일사일칠


Domain, WorkGroup ?

CiscoNetwork 2016. 3. 7. 17:57 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Domain, WorkGroup ?


What is the difference between a domain and a workgroup?


Computers on a network can be part of a workgroup or a domain. The main difference between workgroups and domains is how resources on the network are managed. Computers on home networks are usually part of a workgroup, and computers on workplace networks are usually part of a domain.

In a workgroup:

  • All computers are peers; no computer has control over another computer.

  • Each computer has a set of user accounts. To use any computer in the workgroup, you must have an account on that computer.

  • There are typically no more than ten to twenty computers.

  • All computers must be on the same local network or subnet.

  • 모든 컴퓨터들이 피어이며 다른 컴퓨터를 조정하는 컴퓨터는 없다. 다 동등한 등급이다.

  • 각각의 컴퓨터는 사용자 계정을 가져야 한다. 작업그룹에 포함되려면 반드시 사용자계정을 가져야 한다.

  • 10~20개

  • 모든 컴퓨터는 동일 로컬 네트워크나 서브넷에 있어야 한다.

  • In a domain:

    • One or more computers are servers. Network administrators use servers to control the security and permissions for all computers on the domain. This makes it easy to make changes because the changes are automatically made to all computers.

    • If you have a user account on the domain, you can log on to any computer on the domain without needing an account on that computer.

    • There can be hundreds or thousands of computers.

    • The computers can be on different local networks.

      • 하나 이상의 서버가 필요하다. 네트워크 관리자는 보안을 위해 모든 컴퓨터를 동일 도메인에 둔다. 왜냐하면 동일 도메인에 있는 컴퓨터 모두의 보안 설정을 자동으로 바꿀수 있기 때문이다.

      • 동일 도메인의 모든 컴퓨터에 추가적인 정보 없이 접근이 가능하다.

      • 100~1000개.

      • 모든 컴퓨터는 동일 로컬 네트워크나 서브넷에 있지 않아도 된다.


    Winpcap Tes 09

    Programming/C,CPP,CS 2016. 3. 7. 11:45 Posted by TanSanC
    336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

    Gathering Statistics on the network traffic


    In order to use this feature, the programmer must open an adapter and put it in statistical mode. This can be done with pcap_setmode(). In particular, MODE_STAT must be used as the mode argument of this function.


    With statistical mode, making an application that monitors the TCP traffic load is a matter of few lines of code. The following sample shows how to do it.


     

    /*

    * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)

    * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)

    * All rights reserved.

    *

    * Redistribution and use in source and binary forms, with or without

    * modification, are permitted provided that the following conditions

    * are met:

    *

    * 1. Redistributions of source code must retain the above copyright

    * notice, this list of conditions and the following disclaimer.

    * 2. Redistributions in binary form must reproduce the above copyright

    * notice, this list of conditions and the following disclaimer in the

    * documentation and/or other materials provided with the distribution.

    * 3. Neither the name of the Politecnico di Torino, CACE Technologies 

    * nor the names of its contributors may be used to endorse or promote 

    * products derived from this software without specific prior written 

    * permission.

    *

    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

    *

    */


    #include <stdio.h>


    #include "pcap.h"


    #ifndef WIN32

    #include <sys/socket.h>

    #include <netinet/in.h>

    #else

    #include <winsock.h>

    #endif


    // Winpcap Test 07

    /* 4 bytes IP address */

    typedef struct ip_address{

        u_char byte1;

        u_char byte2;

        u_char byte3;

        u_char byte4;

    }ip_address;


    /* IPv4 header */

    typedef struct ip_header{

        u_char  ver_ihl;        // Version (4 bits) + Internet header length (4 bits)

        u_char  tos;            // Type of service 

        u_short tlen;           // Total length 

        u_short identification; // Identification

        u_short flags_fo;       // Flags (3 bits) + Fragment offset (13 bits)

        u_char  ttl;            // Time to live

        u_char  proto;          // Protocol

        u_short crc;            // Header checksum

        ip_address  saddr;      // Source address

        ip_address  daddr;      // Destination address

        u_int   op_pad;         // Option + Padding

    }ip_header;


    /* UDP header*/

    typedef struct udp_header{

        u_short sport;          // Source port

        u_short dport;          // Destination port

        u_short len;            // Datagram length

        u_short crc;            // Checksum

    }udp_header;



    // Function prototypes

    void ifprint(pcap_if_t *d);

    char *iptos(u_long in);

    char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);

    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);


    // Winpcap Test 09

    void usage();

    void dispatcher_handler(u_char *, const struct pcap_pkthdr *, const u_char *);



    int main()

    {

    pcap_if_t *alldevs;

    pcap_if_t *d;

    char errbuf[PCAP_ERRBUF_SIZE+1];

    char source[PCAP_ERRBUF_SIZE+1] = {'0'};

    int inum;

    int i = 0;

    // Winpcap Test 05

    struct pcap_pkthdr *header;

    int res;

    struct tm ltime;

    char timestr[16];

    const u_char *pkt_data;

    time_t local_tv_sec;

    // Winpcap Test 07

    u_int netmask;

    char packet_filter[] = "ip and udp";

    struct bpf_program fcode;

    // Winpcap Test 08

    pcap_dumper_t *dumpfile ;

    // Winpcap Test 09

    struct timeval st_ts;



    pcap_t *adhandle;



    if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1)

    {

    fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);

    exit(1);

    }


    /* Scan the list printing every entry */

    for(d=alldevs;d;d=d->next)

    {

    ifprint(d);

    i++;

    }


    printf("Enter the interface number (1-%d):",i);

    scanf_s("%d", &inum);



    if(inum < 1 || inum > i)

    {

    printf("\nInterface number out of range.\n");

    /* Free the device list */

    pcap_freealldevs(alldevs);

    return -1;

    }


    /* Jump to the selected adapter */

    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);





    /* Open the device */

    if ( (adhandle= pcap_open(d->name,          // name of the device

    65536,            // portion of the packet to capture

    // 65536 guarantees that the whole packet will be captured on all the link layers

    PCAP_OPENFLAG_PROMISCUOUS,    // promiscuous mode

    1000,             // read timeout

    NULL,             // authentication on the remote machine

    errbuf            // error buffer

    ) ) == NULL)

    {

    fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);

    /* Free the device list */

    pcap_freealldevs(alldevs);

    return -1;

    }


    // Winpcap Test 07

        /* Check the link layer. We support only Ethernet for simplicity. */

        if(pcap_datalink(adhandle) != DLT_EN10MB)

        {

            fprintf(stderr,"\nThis program works only on Ethernet networks.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        if(d->addresses != NULL)

            /* Retrieve the mask of the first address of the interface */

            netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;

        else

            /* If the interface is without addresses we suppose to be in a C class network */

            netmask=0xffffff; 



        //compile the filter

        if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )

        {

            fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        //set the filter

        if (pcap_setfilter(adhandle, &fcode)<0)

        {

            fprintf(stderr,"\nError setting the filter.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        /* Put the interface in statstics mode */

        if (pcap_setmode(adhandle, MODE_STAT)<0)

        {

            fprintf(stderr,"\nError setting the mode.\n");

            pcap_close(adhandle);

            /* Free the device list */

            return;

        }



        printf("TCP traffic summary:\n");


        /* Start the main loop */

        pcap_loop(adhandle, 0, dispatcher_handler, (PUCHAR)&st_ts);


        pcap_close(adhandle);


    return 0;

    }




    /* Print all the available information on the given interface */

    void ifprint(pcap_if_t *d)

    {

    pcap_addr_t *a;

    char ip6str[128];


    /* Name */

    printf("\tName: %s\n",d->name);


    /* Description */

    if (d->description)

    printf("\tDescription: %s\n",d->description);


    /* Loopback Address*/

    printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");


    /* IP addresses */

    for(a=d->addresses;a;a=a->next) {

    if(a->addr->sa_family != AF_INET)

    continue;


    printf("\tAddress Family Name: AF_INET\n");

    if (a->addr)

    printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));

    if (a->netmask)

    printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));

    if (a->broadaddr)

    printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));

    if (a->dstaddr)

    printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));

    }

    printf("\n");

    }




    /* From tcptraceroute, convert a numeric IP address to a string */

    #define IPTOSBUFFERS    12

    char *iptos(u_long in)

    {

    static char output[IPTOSBUFFERS][3*4+3+1];

    static short which;

    u_char *p;


    p = (u_char *)&in;

    which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);

    _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);

    return output[which];

    }


    char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)

    {

    socklen_t sockaddrlen;


    #ifdef WIN32

    sockaddrlen = sizeof(struct sockaddr_in6);

    #else

    sockaddrlen = sizeof(struct sockaddr_storage);

    #endif



    if(getnameinfo(sockaddr, 

    sockaddrlen, 

    address, 

    addrlen, 

    NULL, 

    0, 

    NI_NUMERICHOST) != 0) address = NULL;


    return address;

    }


    void dispatcher_handler(u_char *state, const struct pcap_pkthdr *header, const u_char *pkt_data)

    {

        struct timeval *old_ts = (struct timeval *)state;

        u_int delay;

        LARGE_INTEGER Bps,Pps;

        struct tm ltime;

        char timestr[16];

        time_t local_tv_sec;


        /* Calculate the delay in microseconds from the last sample. */

        /* This value is obtained from the timestamp that the associated with the sample. */

        delay=(header->ts.tv_sec - old_ts->tv_sec) * 1000000 - old_ts->tv_usec + header->ts.tv_usec;

        /* Get the number of Bits per second */

        Bps.QuadPart=(((*(LONGLONG*)(pkt_data + 8)) * 8 * 1000000) / (delay));

        /*                                            ^      ^

                                                      |      |

                                                      |      | 

                                                      |      |

                             converts bytes in bits --       |

                                                             |

                        delay is expressed in microseconds --

        */


        /* Get the number of Packets per second */

        Pps.QuadPart=(((*(LONGLONG*)(pkt_data)) * 1000000) / (delay));


        /* Convert the timestamp to readable format */

        local_tv_sec = header->ts.tv_sec;

        localtime_s(&ltime, &local_tv_sec);

        strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);


        /* Print timestamp*/

        printf("%s ", timestr);


        /* Print the samples */

        printf("BPS=%I64u ", Bps.QuadPart);

        printf("PPS=%I64u\n", Pps.QuadPart);


        //store current timestamp

        old_ts->tv_sec=header->ts.tv_sec;

        old_ts->tv_usec=header->ts.tv_usec;

    }



    void usage()

    {

        

        printf("\nShows the TCP traffic load, in bits per second and packets per second.\nCopyright (C) 2002 Loris Degioanni.\n");

        printf("\nUsage:\n");

        printf("\t tcptop adapter\n");

        printf("\t You can use \"WinDump -D\" if you don't know the name of your adapters.\n");


        exit(0);

    }


    'Programming > C,CPP,CS' 카테고리의 다른 글

    CStdString 표준 C++ 을 사용한 CString C/C++  (0) 2016.03.17
    Visual Studio 6.0 C++ 불러오기 오류(msdev.exe)  (0) 2016.03.15
    Winpcap Sniffing Link  (0) 2016.03.07
    Winpcap Test 08  (0) 2016.03.07
    Winpcap Test 07  (0) 2016.03.07

    Winpcap Sniffing Link

    Programming/C,CPP,CS 2016. 3. 7. 11:29 Posted by TanSanC
    336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

    http://www.binarytides.com/code-packet-sniffer-c-winpcap/


    http://www.codeproject.com/Articles/4217/WebControls/


    'Programming > C,CPP,CS' 카테고리의 다른 글

    Visual Studio 6.0 C++ 불러오기 오류(msdev.exe)  (0) 2016.03.15
    Winpcap Tes 09  (0) 2016.03.07
    Winpcap Test 08  (0) 2016.03.07
    Winpcap Test 07  (0) 2016.03.07
    Winpcap Test 06  (0) 2016.03.07

    Winpcap Test 08

    Programming/C,CPP,CS 2016. 3. 7. 11:24 Posted by TanSanC
    336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

    Handling offline dump files

    Saving packets to a dump file

    • the packets are written to this file with a pcap_dump() from the packet_handler() callback. The parameters of pcap_dump()are in 1-1 correspondence with the parameters of pcap_handler().


     

    /*

    * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)

    * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)

    * All rights reserved.

    *

    * Redistribution and use in source and binary forms, with or without

    * modification, are permitted provided that the following conditions

    * are met:

    *

    * 1. Redistributions of source code must retain the above copyright

    * notice, this list of conditions and the following disclaimer.

    * 2. Redistributions in binary form must reproduce the above copyright

    * notice, this list of conditions and the following disclaimer in the

    * documentation and/or other materials provided with the distribution.

    * 3. Neither the name of the Politecnico di Torino, CACE Technologies 

    * nor the names of its contributors may be used to endorse or promote 

    * products derived from this software without specific prior written 

    * permission.

    *

    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

    *

    */


    #include <stdio.h>


    #include "pcap.h"


    #ifndef WIN32

    #include <sys/socket.h>

    #include <netinet/in.h>

    #else

    #include <winsock.h>

    #endif


    // Winpcap Test 07

    /* 4 bytes IP address */

    typedef struct ip_address{

        u_char byte1;

        u_char byte2;

        u_char byte3;

        u_char byte4;

    }ip_address;


    /* IPv4 header */

    typedef struct ip_header{

        u_char  ver_ihl;        // Version (4 bits) + Internet header length (4 bits)

        u_char  tos;            // Type of service 

        u_short tlen;           // Total length 

        u_short identification; // Identification

        u_short flags_fo;       // Flags (3 bits) + Fragment offset (13 bits)

        u_char  ttl;            // Time to live

        u_char  proto;          // Protocol

        u_short crc;            // Header checksum

        ip_address  saddr;      // Source address

        ip_address  daddr;      // Destination address

        u_int   op_pad;         // Option + Padding

    }ip_header;


    /* UDP header*/

    typedef struct udp_header{

        u_short sport;          // Source port

        u_short dport;          // Destination port

        u_short len;            // Datagram length

        u_short crc;            // Checksum

    }udp_header;



    // Function prototypes

    void ifprint(pcap_if_t *d);

    char *iptos(u_long in);

    char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);

    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);



    int main()

    {

    pcap_if_t *alldevs;

    pcap_if_t *d;

    char errbuf[PCAP_ERRBUF_SIZE+1];

    char source[PCAP_ERRBUF_SIZE+1] = {'0'};

    int inum;

    int i = 0;

    // Winpcap Test 05

    struct pcap_pkthdr *header;

    int res;

    struct tm ltime;

    char timestr[16];

    const u_char *pkt_data;

    time_t local_tv_sec;

    // Winpcap Test 07

    u_int netmask;

    char packet_filter[] = "ip and udp";

    struct bpf_program fcode;

    // Winpcap Test 08

    pcap_dumper_t *dumpfile ;



    pcap_t *adhandle;



    if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1)

    {

    fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);

    exit(1);

    }


    /* Scan the list printing every entry */

    for(d=alldevs;d;d=d->next)

    {

    ifprint(d);

    i++;

    }


    printf("Enter the interface number (1-%d):",i);

    scanf_s("%d", &inum);



    if(inum < 1 || inum > i)

    {

    printf("\nInterface number out of range.\n");

    /* Free the device list */

    pcap_freealldevs(alldevs);

    return -1;

    }


    /* Jump to the selected adapter */

    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);





    /* Open the device */

    if ( (adhandle= pcap_open(d->name,          // name of the device

    65536,            // portion of the packet to capture

    // 65536 guarantees that the whole packet will be captured on all the link layers

    PCAP_OPENFLAG_PROMISCUOUS,    // promiscuous mode

    1000,             // read timeout

    NULL,             // authentication on the remote machine

    errbuf            // error buffer

    ) ) == NULL)

    {

    fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);

    /* Free the device list */

    pcap_freealldevs(alldevs);

    return -1;

    }


    // Winpcap Test 08

        /* Open the dump file */

        dumpfile = pcap_dump_open(adhandle, "Test.dmp");


        if(dumpfile==NULL)

        {

            fprintf(stderr,"\nError opening output file\n");

            return -1;

        }

        

    // Winpcap Test 07

        /* Check the link layer. We support only Ethernet for simplicity. */

        if(pcap_datalink(adhandle) != DLT_EN10MB)

        {

            fprintf(stderr,"\nThis program works only on Ethernet networks.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        if(d->addresses != NULL)

            /* Retrieve the mask of the first address of the interface */

            netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;

        else

            /* If the interface is without addresses we suppose to be in a C class network */

            netmask=0xffffff; 



        //compile the filter

        if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )

        {

            fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        //set the filter

        if (pcap_setfilter(adhandle, &fcode)<0)

        {

            fprintf(stderr,"\nError setting the filter.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        printf("\nlistening on %s...\n", d->description);

        

        /* At this point, we don't need any more the device list. Free it */

        pcap_freealldevs(alldevs);

        

        /* start the capture */

        pcap_loop(adhandle, 0, packet_handler, (unsigned char *)dumpfile);


    return 0;

    }




    /* Print all the available information on the given interface */

    void ifprint(pcap_if_t *d)

    {

    pcap_addr_t *a;

    char ip6str[128];


    /* Name */

    printf("\tName: %s\n",d->name);


    /* Description */

    if (d->description)

    printf("\tDescription: %s\n",d->description);


    /* Loopback Address*/

    printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");


    /* IP addresses */

    for(a=d->addresses;a;a=a->next) {

    if(a->addr->sa_family != AF_INET)

    continue;


    printf("\tAddress Family Name: AF_INET\n");

    if (a->addr)

    printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));

    if (a->netmask)

    printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));

    if (a->broadaddr)

    printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));

    if (a->dstaddr)

    printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));

    }

    printf("\n");

    }




    /* From tcptraceroute, convert a numeric IP address to a string */

    #define IPTOSBUFFERS    12

    char *iptos(u_long in)

    {

    static char output[IPTOSBUFFERS][3*4+3+1];

    static short which;

    u_char *p;


    p = (u_char *)&in;

    which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);

    _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);

    return output[which];

    }


    char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)

    {

    socklen_t sockaddrlen;


    #ifdef WIN32

    sockaddrlen = sizeof(struct sockaddr_in6);

    #else

    sockaddrlen = sizeof(struct sockaddr_storage);

    #endif



    if(getnameinfo(sockaddr, 

    sockaddrlen, 

    address, 

    addrlen, 

    NULL, 

    0, 

    NI_NUMERICHOST) != 0) address = NULL;


    return address;

    }


    /* Callback function invoked by libpcap for every incoming packet */

    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)

    {

    struct tm ltime;

    char timestr[16];

    time_t local_tv_sec;

    // Winpcap Test 07

        ip_header *ih;

        udp_header *uh;

        u_int ip_len;

        u_short sport,dport;


    /*

    * unused variables

    */

    (VOID)(param);

    (VOID)(pkt_data);


    /* convert the timestamp to readable format */

    local_tv_sec = header->ts.tv_sec;

    localtime_s(&ltime, &local_tv_sec);

    strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);


    printf("%s,%.6d len:%d\t", timestr, header->ts.tv_usec, header->len);

        /* retireve the position of the ip header */

        ih = (ip_header *) (pkt_data +

            14); //length of ethernet header


        /* retireve the position of the udp header */

        ip_len = (ih->ver_ihl & 0xf) * 4;

        uh = (udp_header *) ((u_char*)ih + ip_len);


        /* convert from network byte order to host byte order */

        sport = ntohs( uh->sport );

        dport = ntohs( uh->dport );


        /* print ip addresses and udp ports */

        printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n",

            ih->saddr.byte1,

            ih->saddr.byte2,

            ih->saddr.byte3,

            ih->saddr.byte4,

            sport,

            ih->daddr.byte1,

            ih->daddr.byte2,

            ih->daddr.byte3,

            ih->daddr.byte4,

            dport);

        pcap_dump(param, header, pkt_data);


    }




    'Programming > C,CPP,CS' 카테고리의 다른 글

    Winpcap Tes 09  (0) 2016.03.07
    Winpcap Sniffing Link  (0) 2016.03.07
    Winpcap Test 07  (0) 2016.03.07
    Winpcap Test 06  (0) 2016.03.07
    Winpcap Test 05  (0) 2016.03.07

    Winpcap Test 07

    Programming/C,CPP,CS 2016. 3. 7. 10:05 Posted by TanSanC
    336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

    Interpreting the packets



     

    /*

    * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy)

    * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California)

    * All rights reserved.

    *

    * Redistribution and use in source and binary forms, with or without

    * modification, are permitted provided that the following conditions

    * are met:

    *

    * 1. Redistributions of source code must retain the above copyright

    * notice, this list of conditions and the following disclaimer.

    * 2. Redistributions in binary form must reproduce the above copyright

    * notice, this list of conditions and the following disclaimer in the

    * documentation and/or other materials provided with the distribution.

    * 3. Neither the name of the Politecnico di Torino, CACE Technologies 

    * nor the names of its contributors may be used to endorse or promote 

    * products derived from this software without specific prior written 

    * permission.

    *

    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS

    * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT

    * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

    * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT

    * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,

    * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY

    * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE

    * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

    *

    */


    #include <stdio.h>


    #include "pcap.h"


    #ifndef WIN32

    #include <sys/socket.h>

    #include <netinet/in.h>

    #else

    #include <winsock.h>

    #endif


    // Winpcap Test 07

    /* 4 bytes IP address */

    typedef struct ip_address{

        u_char byte1;

        u_char byte2;

        u_char byte3;

        u_char byte4;

    }ip_address;


    /* IPv4 header */

    typedef struct ip_header{

        u_char  ver_ihl;        // Version (4 bits) + Internet header length (4 bits)

        u_char  tos;            // Type of service 

        u_short tlen;           // Total length 

        u_short identification; // Identification

        u_short flags_fo;       // Flags (3 bits) + Fragment offset (13 bits)

        u_char  ttl;            // Time to live

        u_char  proto;          // Protocol

        u_short crc;            // Header checksum

        ip_address  saddr;      // Source address

        ip_address  daddr;      // Destination address

        u_int   op_pad;         // Option + Padding

    }ip_header;


    /* UDP header*/

    typedef struct udp_header{

        u_short sport;          // Source port

        u_short dport;          // Destination port

        u_short len;            // Datagram length

        u_short crc;            // Checksum

    }udp_header;



    // Function prototypes

    void ifprint(pcap_if_t *d);

    char *iptos(u_long in);

    char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);

    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);



    int main()

    {

    pcap_if_t *alldevs;

    pcap_if_t *d;

    char errbuf[PCAP_ERRBUF_SIZE+1];

    char source[PCAP_ERRBUF_SIZE+1] = {'0'};

    int inum;

    int i = 0;

    // Winpcap Test 05

    struct pcap_pkthdr *header;

    int res;

    struct tm ltime;

    char timestr[16];

    const u_char *pkt_data;

    time_t local_tv_sec;

    // Winpcap Test 07

    u_int netmask;

    char packet_filter[] = "ip and udp";

    struct bpf_program fcode;



    pcap_t *adhandle;



    if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1)

    {

    fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);

    exit(1);

    }


    /* Scan the list printing every entry */

    for(d=alldevs;d;d=d->next)

    {

    ifprint(d);

    i++;

    }


    printf("Enter the interface number (1-%d):",i);

    scanf_s("%d", &inum);



    if(inum < 1 || inum > i)

    {

    printf("\nInterface number out of range.\n");

    /* Free the device list */

    pcap_freealldevs(alldevs);

    return -1;

    }


    /* Jump to the selected adapter */

    for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);





    /* Open the device */

    if ( (adhandle= pcap_open(d->name,          // name of the device

    65536,            // portion of the packet to capture

    // 65536 guarantees that the whole packet will be captured on all the link layers

    PCAP_OPENFLAG_PROMISCUOUS,    // promiscuous mode

    1000,             // read timeout

    NULL,             // authentication on the remote machine

    errbuf            // error buffer

    ) ) == NULL)

    {

    fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);

    /* Free the device list */

    pcap_freealldevs(alldevs);

    return -1;

    }


    // Winpcap Test 07

        /* Check the link layer. We support only Ethernet for simplicity. */

        if(pcap_datalink(adhandle) != DLT_EN10MB)

        {

            fprintf(stderr,"\nThis program works only on Ethernet networks.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        if(d->addresses != NULL)

            /* Retrieve the mask of the first address of the interface */

            netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;

        else

            /* If the interface is without addresses we suppose to be in a C class network */

            netmask=0xffffff; 



        //compile the filter

        if (pcap_compile(adhandle, &fcode, packet_filter, 1, netmask) <0 )

        {

            fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        //set the filter

        if (pcap_setfilter(adhandle, &fcode)<0)

        {

            fprintf(stderr,"\nError setting the filter.\n");

            /* Free the device list */

            pcap_freealldevs(alldevs);

            return -1;

        }

        

        printf("\nlistening on %s...\n", d->description);

        

        /* At this point, we don't need any more the device list. Free it */

        pcap_freealldevs(alldevs);

        

        /* start the capture */

        pcap_loop(adhandle, 0, packet_handler, NULL);


    return 0;

    }




    /* Print all the available information on the given interface */

    void ifprint(pcap_if_t *d)

    {

    pcap_addr_t *a;

    char ip6str[128];


    /* Name */

    printf("\tName: %s\n",d->name);


    /* Description */

    if (d->description)

    printf("\tDescription: %s\n",d->description);


    /* Loopback Address*/

    printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");


    /* IP addresses */

    for(a=d->addresses;a;a=a->next) {

    if(a->addr->sa_family != AF_INET)

    continue;


    printf("\tAddress Family Name: AF_INET\n");

    if (a->addr)

    printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));

    if (a->netmask)

    printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));

    if (a->broadaddr)

    printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));

    if (a->dstaddr)

    printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));

    }

    printf("\n");

    }




    /* From tcptraceroute, convert a numeric IP address to a string */

    #define IPTOSBUFFERS    12

    char *iptos(u_long in)

    {

    static char output[IPTOSBUFFERS][3*4+3+1];

    static short which;

    u_char *p;


    p = (u_char *)&in;

    which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);

    _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);

    return output[which];

    }


    char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)

    {

    socklen_t sockaddrlen;


    #ifdef WIN32

    sockaddrlen = sizeof(struct sockaddr_in6);

    #else

    sockaddrlen = sizeof(struct sockaddr_storage);

    #endif



    if(getnameinfo(sockaddr, 

    sockaddrlen, 

    address, 

    addrlen, 

    NULL, 

    0, 

    NI_NUMERICHOST) != 0) address = NULL;


    return address;

    }


    /* Callback function invoked by libpcap for every incoming packet */

    void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data)

    {

    struct tm ltime;

    char timestr[16];

    time_t local_tv_sec;

    // Winpcap Test 07

        ip_header *ih;

        udp_header *uh;

        u_int ip_len;

        u_short sport,dport;


    /*

    * unused variables

    */

    (VOID)(param);

    (VOID)(pkt_data);


    /* convert the timestamp to readable format */

    local_tv_sec = header->ts.tv_sec;

    localtime_s(&ltime, &local_tv_sec);

    strftime( timestr, sizeof timestr, "%H:%M:%S", &ltime);


    printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);

        /* retireve the position of the ip header */

        ih = (ip_header *) (pkt_data +

            14); //length of ethernet header


        /* retireve the position of the udp header */

        ip_len = (ih->ver_ihl & 0xf) * 4;

        uh = (udp_header *) ((u_char*)ih + ip_len);


        /* convert from network byte order to host byte order */

        sport = ntohs( uh->sport );

        dport = ntohs( uh->dport );


        /* print ip addresses and udp ports */

        printf("%d.%d.%d.%d.%d -> %d.%d.%d.%d.%d\n",

            ih->saddr.byte1,

            ih->saddr.byte2,

            ih->saddr.byte3,

            ih->saddr.byte4,

            sport,

            ih->daddr.byte1,

            ih->daddr.byte2,

            ih->daddr.byte3,

            ih->daddr.byte4,

            dport);


    }


    'Programming > C,CPP,CS' 카테고리의 다른 글

    Winpcap Sniffing Link  (0) 2016.03.07
    Winpcap Test 08  (0) 2016.03.07
    Winpcap Test 06  (0) 2016.03.07
    Winpcap Test 05  (0) 2016.03.07
    Winpcap Test 04  (0) 2016.03.07

    Winpcap Test 06

    Programming/C,CPP,CS 2016. 3. 7. 09:59 Posted by TanSanC
    336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

    Filtering the traffic


    The functions used to filter packets are pcap_compile() and pcap_setfilter().


    pcap_compile() takes a string containing a high-level Boolean (filter) expression and produces a low-level byte code that can be interpreted by the fileter engine in the packet driver. The syntax of the boolean expression can be found in the Filtering expression syntaxsection of this documentation.


    pcap_setfilter() associates a filter with a capture session in the kernel driver. Once pcap_setfilter() is called, the associated filter will be applied to all the packets coming from the network, and all the conformant packets (i.e., packets for which the Boolean expression evaluates to true) will be actually copied to the application.



        if (d->addresses != NULL)
            /* Retrieve the mask of the first address of the interface */
            netmask=((struct sockaddr_in *)(d->addresses->netmask))->sin_addr.S_un.S_addr;
        else
            /* If the interface is without an address we suppose to be in a C class network */
            netmask=0xffffff; 
    
    
    compile the filter
        if (pcap_compile(adhandle, &fcode, "ip and tcp", 1, netmask) < 0)
        {
            fprintf(stderr,"\nUnable to compile the packet filter. Check the syntax.\n");
            /* Free the device list */
            pcap_freealldevs(alldevs);
            return -1;
        }
        
    set the filter
        if (pcap_setfilter(adhandle, &fcode) < 0)
        {
            fprintf(stderr,"\nError setting the filter.\n");
            /* Free the device list */
            pcap_freealldevs(alldevs);
            return -1;
        }


    'Programming > C,CPP,CS' 카테고리의 다른 글

    Winpcap Test 08  (0) 2016.03.07
    Winpcap Test 07  (0) 2016.03.07
    Winpcap Test 05  (0) 2016.03.07
    Winpcap Test 04  (0) 2016.03.07
    Winpcap Test 03  (0) 2016.03.07