daemo 初始化代码

下面是memcached中初始化一个daemo的代码,如果我们自己要写daemo的话,这个可以参考:

1. fork时使用了switch结构,而不是if … else

2. 提供了一个参数,决定是否重定向标准输入、标准输出、标准错误

#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>

int daemon(int nochdirint noclose)
{
    
int fd
;

    switch (fork()) {
    case –
1
:
        return (-
1
);
    case 
0
:
        break;
    default:
        
_exit(EXIT_SUCCESS
);
    }

    if (setsid() == –1)
        return (-
1
);

    if (nochdir == 0)
        (
void)chdir("/"
);

    if (noclose == && (fd open("/dev/null"O_RDWR0)) != –1) {
        (
void)dup2(fdSTDIN_FILENO
);
        (
void)dup2(fdSTDOUT_FILENO
);
        (
void)dup2(fdSTDERR_FILENO
);
        if (
fd STDERR_FILENO
)
            (
void)close(fd
);
    }
    return (
0
);
}

openssl rsa 使用简介

openssl命令的用法

 密钥的生成

 a. 生成非对称密钥对
openssl genrsa -out rsa.key
b. 指定生成的密钥的位数,默认512
openssl genrsa -out rsa_2048.key 2048
c. 为私钥添加密码 (一般都不用)
openssl genrsa -out rsa_des3.key -des3


密钥的查看

d. 查看私钥
openssl rsa -in rsa.key
e. 查看公钥
openssl rsa -in rsa.key -pubout
f. 查看公钥和modulus
openssl rsa -in rsa.key -modulus
g. 查看密钥的详细信息,包含component prime等细节信息,这些信息的值都是冒号分割的,称为abstract
openssl rsa -in rsa.key -text
h. 查看只有public key的文件
openssl rsa -in pub.txt -pubin
注:
pub.txt 可由
openssl rsa -in rsa.key -pubout >pub.txt

openssl rsa -in rsa.key -pubout -out pub.txt
产生
如果pub.txt 中不是公钥将报错, -pubin 仅仅说明 -in 所指定的文件里面是什么
i. 只查看key的其他信息,不显示key
openssl  rsa -in rsa.key -noout

openssl rsautl 系列

1. 使用生成的公钥加密文件

-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件

2. 使用生成的私钥解密文件

-in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件

参考: http://www.cnblogs.com/aLittleBitCool/archive/2011/09/22/2185418.html

 

其它:

检查是否含有某个子命令
openssl no-rsa
输出rsa,命令的返回值为1,说明存在该子命令
openssl no-des5
输出no-des5 命令的返回值为0,说明不存在des5这个子命令

分析key的详细信息
openssl asn1parse -in rsa.key
openssl asn1parse -in pub.txt

 

签名和签名的验证

  这里给出一个例子:

基本步骤:

1. 生成rsa密钥对

2. 用私钥做签名

3. 用公钥做验证

[root@bsso ~]# openssl
OpenSSL> genrsa -out rsa.1024 1024
Generating RSA private key, 1024 bit long modulus
………..++++++
……….++++++
e is 65537 (0x10001)
OpenSSL> rsa -in rsa.1024 -pubout
writing RSA key
—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQD0BlFXN1wkgBb5hadMeLz4Pqj2
nZQGyyidW1GTun9rnKkG7o/v/YM8MCcrqW+2hizkbJygfRGvb1iHvc22SD7Q1Unk
7yKU5qDiDnXdIl1x05PMGRwfNhG75uv9tr/IsxA+bmIrEAZ+fxlGhXbg8R2gUm2O
c51AyBOgb92DtEfLgQIDAQAB
—–END PUBLIC KEY—–
OpenSSL> rsa -in rsa.1024 -pubout -out rsa.1024.pub
writing RSA key
OpenSSL> dgst -sign rsa.1024 -sha1 -out a.sign a.php
OpenSSL> dgst -verify rsa.1024.pub -sha1 -signature a.sign a.php

Verified OK
OpenSSL>

 

如何查看公钥的位数:

解释一个错误的说法: 上面的公钥base64 decode 之后为94字节, 不能说该公钥的位数为 94*8 = 752位; 而是用上面的方法查看,为: 512位

 

浏览器与http referer的问题

关于referer,它有很多用途,但是,只有我们真正理解了其含义,才不至于错用,下面说几个referer需要注意的问题

1. 对于firefox,关于referer这部分是可以在about:config里面设置的

2. 一般来讲

         点击一个a标签,访问一个目标页面,这时referer是源页面

         在标签里面访问一个地址,如: img   script 标签的src属性,这时src地址的请求里可以得到referer

3. 跳转时一般没有referer

         使用location.href = "b.htm";则b.htm得不到referer

         使用location.replace("b.htm");则b.htm得不到referer

         使用header("Location: b.htm");则b.htm得不到referer

         怎么跳转可以得到referer呢?

         使用form表单的形式跳转,如:

       <html>
        <
head>
                <
title>redirect</title>
        </
head>
        <
body onload="document.getElementById(‘f’).submit()">
                <
form id="f" action="a.php" method="post">
                        <
input type="hidden" name="n" value="m" />
                </
form>
        </
body>
       </
html>

关于apache的跟踪

曾经修改过/etc/resolve.conf后,发现apache进程里还是使用旧的dns server来解析域名,重启apache后才生效;这里给出几个确认的办法:

办法一: 如果服务器上没有其它需要域名解析的进程的话,使用tcpdump 来观察53端口的udp包就基本可以知道了

                  命令: tcpdump -i eth1 -nn -X -s 0  "port 53 and udp"

办法二: 随便找一个httpd的子进程strace一下就基本知道了,但是要求两点:

                  1. 访问量比较大,随时都有做域名解析的可能;而且程序里确实有做域名解析的需要

                   2. httpd子进程不会死的太快,太快了你会抓不到的

                  命令: strace -p pid_of_httpd_child -e trace=network 2>&1 | grep "(53)"

办法三: 因为httpd子进程可能死的太快,我们就从httpd的守护进程着手
                 命令: strace -p pid_of_httpd_parent -fF -e trace=network 2>&1 | grep "(53)"

windows 应用程序操作IE Cookie

windows的cookie文件我们可以找到,文件格式也可以分析,但是一般我们操作IE cookie时,并不直接操作文件,windows给出了两个操作cookie的api:

InternetGetCookie
InternetSetCookie

但是这两个api的功能很简单:
1. 不能操作httponly属性,及 InternetSetCookie函数不能设置Httponly属性,InternetGetCookie函数也不能获取设置了Httponly属性的cookie

windows还提供了另外两个api:

InternetGetCookieEx
InternetSetCookieEx

这两个api可以操作Httponly属性,但是还有个限制,就是适用于IE8 or later的IE

 

相关文章:http://msdn.microsoft.com/en-us/library/aa385473(VS.85).aspx

要了解windows 就得上msdn

firefox config 简介

firefox中可配置的选项很多,作为一个web开发者来将,我们虽然没有权限修改用户的浏览器配置,但是我们起码可以从中知道浏览器的默认配置是怎样的,这也有利于我们的程序的开发。

在firefox地址栏里输入: about:config

你将发现很多firefox的配置选项,简单说一下我看过的几类:

cache 相关类,可以配置cache的使用方式,如果我们是做测试的,不希望有cache,你们彻底禁止掉就可以了,相关选项为:
browser.cache.disk.enable
browser.cache.memory.enable
network.http.use-cache false 不适用任何cache

另外: browser.cache.disk_cache_ssl 默认为false,说明firefox默认是不缓存走ssl的请求的

network.http 相关类
network.http.max-connections-per-server 默认为15,就是说每个server最多同时发起15个请求
network.http.max-connections 默认为30, 就是同时的最大连接数不超过30个

(测试时发现每个域同时最大的连接数也不超过2个,不知道为何,所以这些配置看完后最好测试一下再去相信)

network.dns 相关类
network.dns.disableIPv6 false 是否先按照ipv6来解析域名

cookie 相关

 

session相关

ssl相关

dom相关

dom.allow_scripts_to_close_windows    默认false , 是否允许script关闭窗口

 

PHP 操作ms word

Useful PHP MSWord class I created to do some simple file conversions.  This class could have a lot more to it but I am not familiar with all the COM MS Word function calls.
<?php
   
// msword.inc.php
   
   // NOTE: Using COM with windows NT/2000/XP with apache as a service
   // – Run dcomcnfg.exe
   // – Find word application and click properties
   // – Click the Security tab
   // – Use Custom Access Permissions
   //      – Add the user who runs the web server service
   // – Use Custom Launch permissions
   //      – Add the user who runs the web server service
   
   
$wdFormatDocument 0
;
   
$wdFormatTemplate 1
;
   
$wdFormatText 2
;
   
$wdFormatTextLineBreaks 3
;
   
$wdFormatDOSText 4
;
   
$wdFormatDOSTextLineBreaks 5
;
   
$wdFormatRTF 6
;
   
$wdFormatUnicodeText 7
;
   
$wdFormatHTML=8
;

   class MSWord
   
{
       
// Vars:
       
var $handle
;
       
       
// Create COM instance to word
       
function MSWord($Visible false
)
       {
           
$this->handle = new COM("word.application") or die("Unable to instanciate Word"
);
           
$this->handle->Visible $Visible
;
       }
       
       
// Open existing document
       
function Open($File
)
       {
           
$this->handle->Documents->Open($File
);
       }
       
       
// Create new document
       
function NewDocument
()
       {
           
$this->handle->Documents->Add
();
       }
       
       
// Write text to active document
       
function WriteText$Text 
)
       {
           
$this->handle->Selection->Typetext$Text 
);
       }
       
       
// Number of documents open
       
function DocumentCount
()
       {
           return 
$this->handle->Documents->Count
;
       }
       
       
// Save document as another file and/or format
       
function SaveAs($File$Format 
)
       {
           
$this->handle->ActiveDocument->SaveAs($File$Format
);
       }
       
       
// Save active document
       
function Save
()
       {
           
$this->handle->ActiveDocument->Save
();
       }
       
       
// close active document.
       
function Close
()
       {
           
$this->handle->ActiveDocument->Close
();
       }
       
       
// Get word version
       
function GetVersion
()
       {
           return 
$this->handle->Version
;
       }
       
       
// get handle to word
       
function GetHandle
()
       {
           return 
$this->handle
;
       }
   
       
// Clean up instance with word
       
function Quit
()
       {
           if( 
$this->handle 
)
           {
               
// close word
               
$this->handle->Quit
();
   
               
// free the object
               
$this->handle->Release
();
               
$this->handle null
;
           }
       }
   };

?>

Example 1, opens an html file, writes text to it, then saves it as a document:
<?php
   $input 
"C:\test.htm"
;
   
$output "C:\test.doc"
;

   $Word = new MSWord;
   
$Word->Open($input
);
   
$Word->WriteText("This is a test "
);
   
$Word->SaveAs($output
);
   
$Word->Quit
();
?>

Example 2, opens an html file, then saves it as a rtf file:
<?php
   $input 
"C:\test.htm"
;
   
$output "C:\test.rtf"
;

   $Word = new MSWord;
   
$Word->Open($input
);
   
$Word->SaveAs($output$wdFormatRTF
);
   
$Word->Quit
();
?>