2013. 9. 15. 10:47




Posted by 삼성동고양이
2012. 11. 29. 20:08









Posted by 삼성동고양이




#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <net/if.h>
#include <netdb.h>
#include <netinet/in.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
 
static int
create_sock (const char *nic)
{
  struct sockaddr_nl addr;
  int                sock;
 
  memset (&addr, 0, sizeof (addr));
  addr.nl_family = AF_NETLINK;
  addr.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR | RTMGRP_IPV6_IFADDR;
 
  sock = socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
  if (sock < 0)
    {
      fprintf (stderr, "failed to open NETLINK_ROUTE socket for %s - %s(%d)",
               nic, strerror (errno), errno);
      return -1;
    }
 
  if (bind (sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
    {
      fprintf (stderr, "failed to bind NETLINK_ROUTE socket for %s - %s(%d)",
                 nic, strerror (errno), errno);
      close (sock);
      return -1;
    }
 
  return sock;
}
 
static int
ip_changed (int         sock,
            const char *nic)
{
  struct nlmsghdr   *nlh;
  char               buffer[4096];
  int                len;
  int                idx;
  int                found;
 
  len = recv (sock, buffer, sizeof (buffer), 0);
  if (len <= 0)
    {
      fprintf (stderr, "NETLINK_ROUTE socket recv() failed\n");
      return -1;
    }
 
  found = 0;
  idx = if_nametoindex (nic);
 
  for (nlh = (struct nlmsghdr *)buffer;
       NLMSG_OK (nlh, len);
       nlh = NLMSG_NEXT (nlh, len))
    {
      if (nlh->nlmsg_type == NLMSG_DONE)
        break;
      if (nlh->nlmsg_type == NLMSG_ERROR)
        continue;
      if (!(NLMSG_OK (nlh, len)))
        continue;
 
      switch (nlh->nlmsg_type)
        {
        case RTM_NEWADDR:
          {
            struct ifaddrmsg *ifa = (struct ifaddrmsg *)NLMSG_DATA (nlh);
 
            if (ifa->ifa_index == idx)
              found = 1;
          }
          break;
        case RTM_NEWLINK:
          {
            struct ifinfomsg *ifi = (struct ifinfomsg *)NLMSG_DATA (nlh);
 
            if (ifi->ifi_index == idx)
              found = 1;
          }
          break;
        default:
          break;
        }
    }
 
  return found;
}
 
static int
get_nic_addr (const char     *nic,
              struct ifaddrs *ifaddr,
              int             wanted_family,
              char           *host,
              int             host_len,
              int            *active)
{
  struct ifaddrs *ifa;
 
  for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next)
    {
      int family;
      int s;
 
      if (ifa->ifa_addr == NULL)
        continue;
 
      if (strcmp (ifa->ifa_name, nic))
        continue;
 
      /* Skip unwanted families. */
      family = ifa->ifa_addr->sa_family;
      if (family != wanted_family)
        continue;
 
      *active = (ifa->ifa_flags & IFF_RUNNING) ? 1 : 0;
 
      s = getnameinfo (ifa->ifa_addr,
                       family == AF_INET ? sizeof (struct sockaddr_in) :
                                           sizeof (struct sockaddr_in6),
                       host,
                       host_len,
                       NULL,
                       0,
                       NI_NUMERICHOST);
      if (s != 0)
        {
          fprintf (stderr, "failed to getnameinfo() for '%s - %s(%d)",
                   ifa->ifa_name, strerror (errno), errno);
          continue;
        }
 
      /* Get the address of only the first network interface card. */
      return 1;
    }
 
  return 0;
}
 
static void
print_ip (const char *nic)
{
  struct ifaddrs *ifaddr;
  char            addr[NI_MAXHOST];
  int             active;
 
  if (getifaddrs (&ifaddr) == -1)
    {
      fprintf (stderr, "failed to getifaddrs() - %s(%d)", strerror (errno), errno);
      return;
    }
 
  if (!get_nic_addr (nic, ifaddr, AF_INET, addr, sizeof (addr), &active))
    if (!get_nic_addr (nic, ifaddr, AF_INET6, addr, sizeof (addr), &active))
      {
        strcpy (addr, "127.0.0.1");
        active = 0;
      }
 
  freeifaddrs (ifaddr);
 
  fprintf (stdout, "%s is %s (link %s)\n",
           nic, addr, active ? "active" : "inactive");
}
 
int
main (void)
{
  char *nic = "eth0";
  int   sock;
 
  print_ip (nic);
 
  sock = create_sock (nic);
  if (sock < 0)
    return -1;
 
  while (1)
    {
      int ret;
 
      ret = ip_changed (sock, nic);
      if (ret < 0)
        return -1;
 
      if (ret)
        print_ip (nic);
    }
 
  close (sock);
 
  return 0;
}
 
/*
  Local Variables:
   mode:c
   c-file-style:"gnu"
   indent-tabs-mode:nil
  End:
  vim:autoindent:filetype=c:expandtab:shiftwidth=2:softtabstop=2:tabstop=8
*/


출처 : http://lethean.pe.kr

Posted by 삼성동고양이

여자 얼굴, 예쁘다고 전부가 아니다?

중국 명나라시대의 원충철이란 아주 관상을 잘보는 사람이 있었는데  어찌나 상을 잘보던지 그 소문이 자자하여  중국 황궁에 들어가 황제를 보필하는 지위에 이르렀다고 한다. 
명나라 황제인 영락황제가 원충철에게 100가지 질문을 하였고 그에 답을 한 기록이 지금도 내려오는데 이를 '영락백문'이라 하였으며  이 책에 여인칠살에 대한 얘기가 나온다. 
남자를 망하게 할 수 있는 일곱가지 여자 얼굴에 대해 알아보자. 


[펌] 남자가 피해야 할 일곱가지 여자 관상

 
 
一殺 : 美 婦 黃 睛(미부황정)  
아름다운 부인의 눈동자가 노랗다. 미모의 부인의 눈동자가 노랗다는 뜻이다. 남녀 모두 눈동자 안에 노란테가 있으면 정업을 하지 않죠. 
정업이란 그냥 일반적인 직업인데  정업이 아니라면 뭐...   사채업,술장사,여자장사 뭐 그런겁니다. 
황정의 눈동자를 가진 여자는 대부분 좀 사납고 기가 센 경우가 많습니다. 
주의점: 황금빛의 맑고 밝은 빛은 좋은 것입니다.  위에 언급한 황정이란 그 색이 탁하면서 노랗다는 것을 뜻하는 것입니다.


二殺 : 面 大 口 小(면대구소) 
큰 얼굴에 작은 입 
여자가 얼굴이 위아래로 납작하고 얼굴이 좌우로 아주 넓은것을  관상학적 용어로 '대찰'이라 하는데 이런 얼굴을 가진 여자는 과부들이 많죠. 
보통... 사람이 입이 작으면 소심함이 있는데  제 지식으로 약간 이해가 안되는 부분입니다. 
여튼 여자가 얼굴이 크고 넓으면 남자의 기운이 강하다고 봅니다. 그래서 성질이 좀 사나운 면이 있죠. 
제가 관찰한 바에 의하면 면대구소의 상을 가진 여자도  28세 전엔 얌전한 여자가 많습니다. 하지만 28세가 넘으면 본연의 성격이 나오더군요. 특히 턱이 각졌다면 완전 제멋대로인 경우가 많습니다.


 
三殺 : 鼻 上 生 紋 (비상생문) 
코등위에 세로의 잔주름  
여자들 웃을때 콧등을 잔뜩 찡그리며 웃는 경우가 종종 있죠. 여자 탤런트 김모양도 활짝 웃을때 콧등을 잔뜩 찡그리는데 비상생문이 이런 경우입니다.

모르는 사람은 그게 뭐 매력이라고 하는데  남자 죽이는 살기인데 매력은 개뿔... 


四殺 : 耳 反 無 輪 (이반무륜) 
귓바퀴가 없으면서 발라당 까진귀 
여자가 귀가 발라당 까지면 시집을 네번간다고 했습니다. 진짜로 네번 가는건 아니고 그럴 가망성이 있다는 것이죠. 
남녀 모두 귀가 발라당 까지면 고집이 굉장히 쎄기 때문에  그 고집을 꺽을 수가 없습니다. 
이반무륜이란 단지 귀가 까진것을 넘어 귓바퀴 자체도 없으면서  발라당 까진 것으로 개화이라고도 하죠.


五殺 : 極 美 面 女 銀 色 (극미면여은색) 
한예슬, 김태희급의 미모에  낯빛이 차가운 은빛처럼 빛나는 여인. 
S급의 미모에 얼굴이 차갑게 은빛으로 빛나는 여인으로써 오살에 속합니다. 
얼굴이 밝으며 빛나는것은 좋은 거지만 차갑게 은빛으로 빛나는 것은 좋지 않죠. 
개인적인 생각으로 경국지색이라 하여 이런 여인을  잘못 품은 황제가 결국 한 나라를 망하게도 하는경우가 아마도 이경우가 아닌가 싶네요. 
 

六殺 : 髮 黑 無 眉 (발흑무미) 
아주 까만 흑발에 눈썹이 없는 여인 
머리결이 아주 까맣지만 윤기가 없는 경우인 걸 얘기하는 것 같습니다. 
여인의 귀함은 눈썹에서 나오는 건데 눈썹이 없는 여인을 마누라 삼을땐  그 심성을 특히 잘 살펴야 합니다.  관상을 배우는 이유가 이런 것들이죠. 
머리가 거칠며 검고 선천적으로 눈썹이 완전 없는 경우를 발흑무미 라고 하는데  눈썹이 없는 여인은 본성이 천하며 화류계가 될수 있습니다.
 

七殺 : 睛 大 眉 粗 (정대미조) 

검은 눈동자가 아주 크며 눈썹이 거칠다. 
눈동자가 너무 크면 뇌발육에 문제가 있는 겁니다. 
눈동자가 너무 크면 일백안이 될 수 있는데  사백안처럼 뇌가 선천적으로 문제가 있을 수가 있으므로  이런 여인은 조심해야 하며 특히 눈동자가 항상 붉은 여인도 조심해야 합니다. 
여인이 눈썹이 안좋은 것은 육살에서 언급했으므로 패스하겠습니다. 

클릭하시면 원본 이미지를 보실 수 있습니다.


제가 과부상에 대해 연속으로 글을 올리는 이유는  인간에겐 배우자 운이 굉장히 중요하기 때문에 여인을 만날때 잘 살펴볼 필요가 있기 때문입니다. 
제가 장담하건데 저 7가지 살기를 모두 갖춘 여자는  절대 얻지 말것을 당부드립니다. 
평범한 여자들 중에 한두가지 갖추고 있지만  잘사는 사람들은 많습니다.  
결혼할 여자가 위의 상에 많이 속하여 있다면  연애 기간을 조금 길게 잡고  신중하게 배우자로 맞이할 것을 당부드립니다.


출처 : 이종격투(http://cafe.daum.net/ssaumjil/LnOm/853841) 
Posted by 삼성동고양이
tcpdump 와 tcpreplay를 이용한 패킷 릴레이

iptables를 이용한 패킷 릴레이의 경우 
app 레벨에서 해당 패킷이 필요한 경우에는 사용할 수 없다는 단점이 존재한다.

패킷이 필요한 app에서 릴레이를 해주는 것이 가장 좋으나
개발이 필요하기에 시간이 필요하다는 단점이 존재한다.

tcpdump와 tcpreplay를 이용한 패킷 릴레이의 경우 
두가지 문제를 모두 해결 할 수 있지만 이 또한 실시간 릴레이가 필요한 경우에는
시간차가 존재한다.

다만 일정 시간(1분,10분,1시간)단위로 패킷을 모아서 전송해도 무방한 경우에는 
유용하게 사용할 수 있다.



리눅스에서의 패킷 릴레이를 위한 tcpdump  tcpreplay활용

 

1.     사용 환경

1)    전송 장비 : Cisco Switch 6506

2)    릴레이 서버 : CentOS 5.5 32bit (이하 A)

3)    리시브 서버 : CentOS 4.7 32bit (이하 B)

 

2.     사용 툴

1)    Iptables: 방화벽의 용도가 아닌 패킷 릴레이를 위한 용도로 사용

2)    Tcpdump: 릴레이 서버가 받는 패킷을 캡쳐하기 위한 툴

3)    Tcpreplay: 받아들인 패킷을 재 전송하기 위한 툴

4)    Tcprewrite: tcpreplay에 포함되어 있는 툴로써 패킷의 dst,dmac 등을 수정하기 위한 툴

 

3.     릴레이 시나리오

1)    CiscoSwitch에서 A로의 snmpTrap 전송

2)    A에서 해당하는 패킷을 tcpdump로 캡쳐

3)    tcprewrite를 이용해 패킷 수정

4)    tcpreplay를 이용해 재전송

5)    B에서 확인

 

4.     테스트

1)    A에서 tcpdump로 받은 패킷 (수정전 원본 패킷)

2)    Tcprewrite로 수정 후

 

 

3)    Tcpreplay로 전송 후 B에서 캡쳐한 패킷


 

A에서 받은 패킷과 수정 후 패킷이 동일함은 Time으로 확인할 수 있으며

스크린샷 상에서는 확인이 불가하지만 Source mac주소도 동일함을 확인할 수 있다.

 

5.     Tcpdump사용법

tcpdump -nn -i eth0 dst port 162 -wsample.pcap -s 1000

> eth0으로들어오는 패킷 중 dst port 162인 패킷을 1000byte까지의 사이즈로 sample.pcap으로 수집하라

상세한 내용은 man page를 참조하세요.

 

 

6.     Tcprewrite사용법

tcprewrite -i ./sample.pcap -o./sample_rewrite.pcap --dstipmap [수정될IP]:[수정할IP] --portmap [수정될port]:[수정할port] --enet-dmac=[목적지 mac주소] -C -v

> sample.pcap파일의 내용을 dstip,dmac,port를 변경 후  sample_rewrite.pcap으로 저장

 

옵션

tcprewrite(tcprewrite) - Rewrite the packets in a pcap file.

USAGE:  tcprewrite [ -<flag> [<val>] |--<name>[{=| }<val>] ]...

 

   -r, --portmap=str          Rewrite TCP/UDP ports

   -s, --seed=num             Randomize src/dst IPv4/v6addresses w/ given seed

   -N, --pnat=str             Rewrite IPv4/v6 addresses usingpseudo-NAT

   -S, --srcipmap=str         Rewrite source IPv4/v6 addresses usingpseudo-NAT

   -D, --dstipmap=str         Rewrite destination IPv4/v6 addressesusing pseudo                                -NAT

   -e, --endpoints=str        Rewrite IP addresses to be between twoendpoints

   -b, --skipbroadcast        Skip rewriting broadcast/multicastIPv4/v6 address                                es

   -C, --fixcsum              Force recalculation ofIPv4/TCP/UDP header checksu                                 ms

   -m, --mtu=num              Override default MTU length (1500bytes)

       --mtu-trunc            Truncate packets larger thenspecified MTU

   -E, --efcs                 Remove Ethernet checksums(FCS) from end of frames

       --ttl=str              Modify the IPv4/v6 TTL/Hop Limit

       --tos=num              Set the IPv4 TOS/DiffServ/ECN byte

       --tclass=num           Set the IPv6 Traffic Class byte

       --flowlabel=num        Set the IPv6 Flow Label

   -F, --fixlen=str           Pad or truncate packet data to matchheader length

       --skipl2broadcast      Skip rewriting broadcast/multicast Layer2 address                                es

       --dlt=str              Override output DLT encapsulation

       --enet-dmac=str        Override destination ethernet MACaddresses

       --enet-smac=str        Override source ethernet MAC addresses

       --enet-vlan=str        Specify ethernet 802.1q VLAN tag mode

       --enet-vlan-tag=num    Specify the new ethernet 802.1q VLAN tagvalue

       --enet-vlan-cfi=num    Specify the ethernet 802.1q VLAN CFI value

       --enet-vlan-pri=num    Specify the ethernet 802.1q VLAN priority

       --hdlc-control=num     Specify HDLC control value

       --hdlc-address=num     Specify HDLC address

       --user-dlt=num         Set output file DLT type

       --user-dlink=str       Rewrite Data-Link layer with userspecified data

   -i, --infile=str           Input pcap file to be processed

   -o, --outfile=str          Output pcap file

   -c, --cachefile=str        Split traffic via tcpprep cache file

   -v,--verbose              Print decodedpackets via tcpdump to STDOUT

   -A, --decode=str           Arguments passed to tcpdump decoder

       --fragroute=str        Parse fragroute configuration file

       --fragdir=str          Which flows to apply fragroute to:c2s, s2c, both

       --skip-soft-errors     Skip writing packets with soft errors

   -V, --version              Print version information

   -h, --less-help            Display less usage information andexit

   -H, --help                 Display usage information andexit

   -!, --more-help            Extended usage information passedthru pager

   -*, --save-opts[=arg]      Save the option state to a config file

   -+,--load-opts=str        Load options froma config file

 

7.     Tcpreplay

tcpreplay --topspeed --intf1=eth0./sample_rewrite.pcap

sample_rewrite.pcap 파일을 최고의 속력으로 eth0을 통해 전송

 

tcpreplay(tcpreplay) - Replay network traffic stored in pcap files

USAGE:  tcpreplay [ -<flag> [<val>] | --<name>[{=|}<val>] ]... <pcap_file(s)>

 

   -q, --quiet                Quiet mode

   -T, --timer=str            Select packet timing mode: select,ioport, rdtsc, gtod, nano, abstime

       --sleep-accel=num      Reduce the amount of time to sleep byspecified usec

       --rdtsc-clicks=num     Specify the RDTSC clicks/usec

   -v, --verbose              Print decoded packets via tcpdumpto STDOUT

   -A, --decode=str           Arguments passed to tcpdump decoder

   -K, --enable-file-cache    Enable caching of packets to internalmemory

   -c, --cachefile=str        Split traffic via a tcpprep cache file

   -i, --intf1=str            Server/primary traffic outputinterface

   -I, --intf2=str            Client/secondary traffic outputinterface

       --listnics             List available network interfacesand exit

   -l, --loop=num             Loop through the capture file Xtimes

       --pktlen               Override the snaplen and use theactual packet len

   -L, --limit=num            Limit the number of packets to send

   -x, --multiplier=str       Modify replay speed to a given multiple

   -p, --pps=num              Replay packets at a givenpackets/sec

   -M, --mbps=str             Replay packets at a given Mbps

   -t, --topspeed             Replay packets as fast as possible

   -o, --oneatatime           Replay one packet at a time for eachuser input

       --pps-multi=num        Number of packets to send for each timeinterval

   -P, --pid                  Print the PID of tcpreplay atstartup

   -V, --version              Print version information

   -h, --less-help            Display less usage information andexit

   -H, --help                 Display usage information andexit

   -!, --more-help            Extended usage information passedthru pager

       --save-opts[=arg]      Save the option state to a config file

 

      --load-opts=str        Loadoptions from a config file

c출처 :  

http://mrain7.egloos.com/2839320 

'Developer's Infos > Network Programming' 카테고리의 다른 글

uint32_t을 IP로 표현하기  (0) 2011.09.15
Posted by 삼성동고양이