Archive | 网络技术

3proxy 使用教程(转)

Posted on 06 11月 2018 by simon

转自:3proxy 使用指北 (by wsgzao)

Comments (1)

Tags: ,

RESTful API 最佳实践(转)

Posted on 10 10月 2018 by simon

一、URL 设计

1.1 动词 + 宾语

RESTful 的核心思想就是,客户端发出的数据操作指令都是”动词 + 宾语”的结构。比如,GET /articles这个命令,GET是动词,/articles是宾语。

动词通常就是五种 HTTP 方法,对应 CRUD 操作。

  • GET:读取(Read)
  • POST:新建(Create)
  • PUT:更新(Update)
  • PATCH:更新(Update),通常是部分更新
  • DELETE:删除(Delete)

根据 HTTP 规范,动词一律大写。

Continue Reading

Comments (0)

Tags: , ,

linux系统禁ping及改ssh端口

Posted on 25 10月 2017 by simon

#禁ping操作#

1、修改文件

echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all

即可

如果需要ping通则输入:

echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all

该命令重启后会失效,所以应该让其开机后自动运行

echo "echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all" >>/etc/rc.d/rc.local

2、也可以通过iptables来配置

①允许PING设置

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

或者也可以临时停止防火墙操作的。

service iptables stop

②禁止PING设置

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP

#修改ssh端口#

1、修改文件

vim /etc/ssh/sshd_config

找到#Port 22,将其修改为其他端口,不建议使用常用端口,80 21 443 3306等等。

2、然后后重启服务,

Centos6.x系统,

/etc/init.d/sshd restart

Centos7.x系统,

systemctl restart sshd.service

Comments (0)

密码保护:出场教程

Posted on 24 10月 2017 by simon

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

要查看留言请输入您的密码。

Tags: , ,

winhttp api和com对象版区别

Posted on 10 5月 2017 by simon

到底该用哪个接口,微软这么说,api方式:功能齐全,不过调用复杂些;com接口,调用简单,属于一个封装,有部分功能缺失。https://msdn.microsoft.com/zh-cn/library/aa383158(v=vs.85).aspx

C/C++ API COM interface
Advantages
  • Responses can be processed in chunks, which is more efficient.
  • POST operations can also be processed in chunks, speeding processing time.
  • AutoProxy support.
  • Access to the full feature set of WinHTTP.
  • Binary data can easily be handled.
  • Creating an application is easy and requires fewer lines of code than the C/C++ API.
  • The interface can be used by scripting languages.
Disadvantages
  • Processing is more complex.
  • The C/C++ API requires more steps than the COM interface to perform the same actions.
  • Setting up a request takes more code.
  • The COM interface does not provide access to the full feature set of WinHTTP.
  • It is difficult to handle binary data types in some scripting languages, such as VBScript and JScript.
  • The COM interface does not support AutoProxy.
  • Applications must use the COM APARTMENT_THREADED model.
  • Before a response can begin being processed, the entire response must first be received and buffered.

Comments (0)

Tags:

密码保护:Mindjet MindManager2016 可用版

Posted on 06 3月 2017 by simon

此内容受密码保护。如需查阅,请在下列字段中输入您的密码。

密码保护:Mindjet MindManager2016 可用版已关闭评论

Tags: , ,

lnmp下mysql 5.6内存占用过高解决方法

Posted on 02 11月 2015 by simon

最新的lnmp一键包1.2里,可以选择mysql5.6版本安装,但是最近发现mysql有时候会出现挂掉的情况,看一下mysql错误日志,应该是内存占满导致的,1G内存的vps是伤不起的。。

重启mysql服务后,top一下发现这一个mysql服务就占用了500多MB内存。。

Google一番,贴一下记录:

mysql5.6的默认配置是不适合小型站点的,win的话在my.ini里修改、linux则在/etc/my.cnf里修改performance_schema_max_table_instances参数,有就修改,没有就追加:

performance_schema_max_table_instances=400
table_definition_cache=400
table_open_cache=256

修改完毕后,重启mysql服务,service mysql restart,然后top后发现内存占用少了一半,应该还有很大优化空间,鉴于内存基本够用了,就不继续折腾了。

Comments (3)

Tags: , , , ,

excel中批量添加带图片批注的vba宏命令

Posted on 04 6月 2015 by simon

应用场景

1、在excel中,有很多型号的产品名称,需要鼠标悬浮到某产品型号上自动在excel中显示对应的图片,用来对比筛选

2、公司举行某活动,需要对用户反馈的图片进行人工甄选、审查等等,具体用途可以拓展。

使用方法

为下面宏命令添加快捷键,可将其导出为加载宏,在excel中调用该加载宏,使用快捷键即可批量快速给目标单元格加上图片批注。

宏命令如下:


'***************************************************
'* 加载宏:excel图片批量添加批注功能
'* 功能描述:对本地文档里图片,自动进行对应至excel中单元格
'* 作 者:simon
'* 作者博客:sunweiwei.com
'* 日 期:2015-6-4
'* 版 本:V1.0.0
'***************************************************
'整行注释的为在读取图片尺寸时不需要的文件头信息
'BMP文件头
Private Type BitmapFileHeader
bfType As Integer '标识 0,1 两个字节为 42 4D 低位在前,即 19778
bfReserved2 As Integer
bfOffBits As Long
bfReserved1 As Integer
bfSize As Long
End Type
Private Type BitmapInfoHeader
biSize As Long
biWidth As Long '宽度 18,19,20,21 四个字节,低位在前
biHeight As Long '高度 22,23,24,25 四个字节,低位在前
' biPlanes As Integer
' biBitCount As Integer
' biCompression As Long
' biSizeImage As Long
' biXPelsPerMeter As Long
' biYPelsPerMeter As Long
' biClrUsed As Long
' biClrImportant As Long
End Type
'JPEG(这个好麻烦)
Private Type LSJPEGHeader
jSOI As Integer '图像开始标识 0,1 两个字节为 FF D8 低位在前,即 -9985
jAPP0 As Integer 'APP0块标识 2,3 两个字节为 FF E0
jAPP0Length(1) As Byte 'APP0块标识后的长度,两个字节,高位在前
' jJFIFName As Long 'JFIF标识 49(J) 48(F) 44(I) 52(F)
' jJFIFVer1 As Byte 'JFIF版本
' jJFIFVer2 As Byte 'JFIF版本
' jJFIFVer3 As Byte 'JFIF版本
' jJFIFUnit As Byte
' jJFIFX As Integer
' jJFIFY As Integer
' jJFIFsX As Byte
' jJFIFsY As Byte
End Type
Private Type LSJPEGChunk
jcType As Integer '标识(按顺序):APPn(0,1~15)为 FF E1~FF EF; DQT为 FF DB(-9217)
'SOFn(0~3)为 FF C0(-16129),FF C1(-15873),FF C2(-15617),FF C3(-15361)
'DHT为 FF C4(-15105); 图像数据开始为 FF DA
jcLength(1) As Byte '标识后的长度,两个字节,高位在前
'若标识为SOFn,则读取以下信息;否则按照长度跳过,读下一块
jBlock As Byte '数据采样块大小 08 or 0C or 10
jHeight(1) As Byte '高度两个字节,高位在前
jWidth(1) As Byte '宽度两个字节,高位在前
' jColorType As Byte '颜色类型 03,后跟9字节,然后是DHT
End Type
'PNG文件头
Private Type LSPNGHeader
pType As Long '标识 0,1,2,3 四个字节为 89 50(P) 4E(N) 47(G) 低位在前,即 1196314761
pType2 As Long '标识 4,5,6,7 四个字节为 0D 0A 1A 0A
pIHDRLength As Long 'IHDR块标识后的长度,疑似固定 00 0D,高位在前,即 13
pIHDRName As Long 'IHDR块标识 49(I) 48(H) 44(D) 52(R)
Pwidth(3) As Byte '宽度 16,17,18,19 四个字节,高位在前
Pheight(3) As Byte '高度 20,21,22,23 四个字节,高位在前
' pBitDepth As Byte
' pColorType As Byte
' pCompress As Byte
' pFilter As Byte
' pInterlace As Byte
End Type
'GIF文件头(这个好简单)
Private Type LSGIFHeader
gType1 As Long '标识 0,1,2,3 四个字节为 47(G) 49(I) 46(F) 38(8) 低位在前,即 944130375
gType2 As Integer '版本 4,5 两个字节为 7a单幅静止图像9a若干幅图像形成连续动画
gWidth As Integer '宽度 6,7 两个字节,低位在前
gHeight As Integer '高度 8,9 两个字节,低位在前
End Type
Public Function PictureSize(ByVal picPath As String, ByRef Width As Long, ByRef Height As Long) As String
Dim iFile As Integer
Dim jpg As LSJPEGHeader
Width = 0: Height = 0 '预输出:0 * 0
If picPath = "" Then PictureSize = "null": Exit Function '文件路径为空
If Dir(picPath) = "" Then PictureSize = "not exist": Exit Function '文件不存在
PictureSize = "error" '预定义:出错
iFile = FreeFile()
Open picPath For Binary Access Read As #iFile
Get #iFile, , jpg
If jpg.jSOI = -9985 Then
Dim jpg2 As LSJPEGChunk, pass As Long
pass = 5 + jpg.jAPP0Length(0) * 256 + jpg.jAPP0Length(1) '高位在前的计算方法
PictureSize = "JPEG error" 'JPEG分析出错
Do
Get #iFile, pass, jpg2
If jpg2.jcType = -16129 Or jpg2.jcType = -15873 Or jpg2.jcType = -15617 Or jpg2.jcType = -15361 Then
Width = jpg2.jWidth(0) * 256 + jpg2.jWidth(1)
Height = jpg2.jHeight(0) * 256 + jpg2.jHeight(1)
PictureSize = Width & "*" & Height
'PictureSize = "JPEG" 'JPEG分析成功
'Stop
Exit Do
End If
pass = pass + jpg2.jcLength(0) * 256 + jpg2.jcLength(1) + 2
Loop While jpg2.jcType <> -15105 'And pass < LOF(iFile)
ElseIf jpg.jSOI = 19778 Then
Dim bmp As BitmapInfoHeader
Get #iFile, 15, bmp
Width = bmp.biWidth
Height = bmp.biHeight
PictureSize = Width & "*" & Height
' PictureSize = "BMP" 'BMP分析成功
Else
Dim png As LSPNGHeader
Get #iFile, 1, png
If png.pType = 1196314761 Then
Width = png.Pwidth(0) * 16777216 + png.Pwidth(1) * 65536 + png.Pwidth(2) * 256 + png.Pwidth(3)
Height = png.Pheight(0) * 16777216 + png.Pheight(1) * 65536 + png.Pheight(2) * 256 + png.Pheight(3)
PictureSize = Width & "*" & Height
'PictureSize = "PNG" 'PNG分析成功
ElseIf png.pType = 944130375 Then
Dim gif As LSGIFHeader
Get #iFile, 1, gif
Width = gif.gWidth
Height = gif.gHeight
PictureSize = Width & "*" & Height
'PictureSize = "GIF" 'GIF分析成功
Else
PictureSize = "unknow" '文件类型未知
End If
End If
Close #iFile
End Function
'*************************
Sub 添加图片批注()
Dim 单元格
Dim w As Long, h As Long
Dim f As String '图片文件完成路径
Dim t As String
Dim Pwidth As Long, Pheight As Long
Dim Psize As String
On Error Resume Next
For Each 单元格 In Selection
单元格.AddComment
单元格.Comment.Shape.Fill.UserPicture ActiveWorkbook.Path & "\pic\" & Replace(单元格.Value, "[图片]", "") & ".jpg"
f = ActiveWorkbook.Path & "\pic\" & Replace(单元格.Value, "[图片]", "") & ".jpg" '图片文件完成路径
Psize = PictureSize(f, w, h) '运行宏,w,h就是对应图片的width height ,返回 width*height
If Len(Psize) > 0 Then
Pwidth = Val(Split(Psize, "*")(0)) '返回 图片 宽
Pheight = Val(Split(Psize, "*")(1)) '返回 图片 高
End If
单元格.Comment.Shape.Height = Pheight / 4
单元格.Comment.Shape.Width = Pwidth / 4
Next 单元格
End Sub

Comments (2)

Tags: ,

wininet,winhttp,xmlhttprequest,ServerXmlHttpRequest各版本区别

Posted on 22 5月 2015 by simon

一、标准API接口WinINet(Microsoft Windows Internet)和WinHTTP(Microsoft Windows HTTP)

实现Http访问,微软提供了二套API:WinINet, WinHTTP(分别封装于system32目录下的wininet.dll和winhttp.dll内)
二者主要区别在于后者更为安全和稳定,可以说WinHTTP是WinINet的升级版
LZ所提的UDF WinHTTP.au3就是直接调用标准接口写成的自定义函数库文件

二、COM对象XMLHttpRequest和WinHttpRequest和ServerXMLHTTPRequest

XMLHttpRequest是基于WinInet封装的,
而WinHttpRequest和ServerXMLHTTPRequest则是基于WinHTTP封装的
所以三者的稳定性属XMLHttpRequest为最差
封装成COM形式主要是为了方便js vbs等脚本的调用,还具有易书写、降低开发难度等许多特点把

三、对象版本和封装位置

1、XMLHttpRequest对象版本和对应的封装dll文件
Microsoft.XMLHTTP 对应 msxml.dll
MSXML2.XMLHTTP 对应 msxml2.dll
MSXML2.XMLHTTP.3.0 对应 msxml3.dll
MSXML2.XMLHTTP.4.0 对应 msxml4.dll
MSXML2.XMLHTTP.5.0 对应 msxml5.dll(此版本是伴随office2007发布的,所以目录下可能找不到该版本的dll)
MSXML2.XMLHTTP.6.0 对应 msxml6.dll
如上各个dll的发布一般都是以补丁的形式发布,win7默认都集成了吧

2、ServerXMLHTTP对象版本和对应的封装dll文件
Msxml2.ServerXMLHTTP 对应 msxml2.dll(win7自带,下同!)
Msxml2.ServerXMLHTTP.3.0 对应 msxml3.dll
Msxml2.ServerXMLHTTP.4.0 对应 msxml4.dll
Msxml2.ServerXMLHTTP.5.0 对应 msxml5.dll
Msxml2.ServerXMLHTTP.6.0 对应 msxml6.dll

3、WinHttpRequest对象
WinHttp.WinHttpRequest.5.1 对应 Winhttp.dll

(如上高版本的通常稳定性会好一点)

四、对象成员(属性、方法、事件等),主要优缺点

XMLRequest成员参考
缺点:和浏览器挂钩,大多情况下会共享cookies,session,不支持单独设置代理
优点:和浏览器挂钩,大多情况下会共享cookies,session

ServerXMLHTTP成员参考
缺点:系统没有对应dll的情况下程序需要外挂一个dll文件
优点:脱离浏览器,使用代理方便

WinHttpRequest成员参考
缺点:暂无
优点:脱离浏览器,使用代理方便

Continue Reading

Comments (0)

Tags: , ,

windows多进程间数据通信:内存映射

Posted on 19 5月 2015 by simon

啥是进程?进程是一个正在运行的程序的实例,主要由两部分组成:(1)一个操作系统用来管理进程的内核对象。(2)创建时系统所分配的资源,主要是内存地址空间。

为啥要了解进程间数据通信?如果需要在多进程运行下进行协同工作,那么就需要掌握该知识。进程间通信是指在多进程环境下,使用的数据交互、事件通知等方法使各进程协同工作。

常用的有4种:消息传递、共享内存、管道、剪贴板:

(1)消息传递:不以进程为界限,处理消息的是窗体(包括子窗体、控件等),而与是否在同一进程无关。
如SendMessage(hwnd,WM_COPYDATA,wParam,lParam); 其中wParam设置为包含数据的窗口的句柄。lParam指向一个COPYDATASTRUCT的结构:
typedef struct tagCOPYDATASTRUCT{
DWORD dwData;//用户定义数据
DWORD cbData;//数据大小
PVOID lpData;//指向数据的指针
};该结构用来定义用户数据。

(2)共享内存:在一个进程内创建内存映射,却能够在其他都个进程中使用。这些进程共享的是物理存储器的同一个页面,在把这些物理内存映射到虚拟内存时各个进程的虚拟地址并不一定相同。当一个进程将数据写入共享内存时,其他进程可以立即获取数据变更情况。

(3)管道和邮槽:其实是对共享内存的两种不同的封装机制。

(4)剪贴板:Windows系统支持剪贴板IPC的基本机制是由系统预留的一块全局共享内存,可用于被各进程暂时存储数据。写入进程首先创建一个全局内存块,并将数据写到该内存块;接受数据的进程通过剪贴板机制获取此内存块的句柄,并完成对该内存块数据的读取。

关于内存映射:如果物理内存只有一份,让这份内存在不同的进程中,映射到各自的虚拟地址空间上,每个进程都可以读取同一份数据,是一种最高效的数据交换方法。

下面开始讲述共享内存映射的方式

首先使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据

比如有A、B两个进程,

1、A进程中调用内存映射API函数CreateFileMapping创建一个有名字标识的共享内存;

CreateFileMapping原型:
HANDLE CreateFileMapping(
HANDLE hFile, //物理文件句柄
LPSECURITY_ATTRIBUTES lpAttributes, //安全设置
DWORD flProtect, //保护设置
DWORD dwMaximumSizeHigh, //高位文件大小
DWORD dwMaximumSizeLow, //低位文件大小
LPCTSTR lpName //共享内存名称
);

2、再调用MapViewOfFile函数来映射本进程的地址空间(MapViewOfFile支持映射一个超过4G大小的文件,但地址空间最大只有 4G,可以通过设置Offset来只映射一部分文件 )

LPVOID WINAPI MapViewOfFile(
__in HANDLE hFileMappingObject,
__in DWORD dwDesiredAccess,
__in DWORD dwFileOffsetHigh,
__in DWORD dwFileOffsetLow,
__in SIZE_T dwNumberOfBytesToMap
);

hMemFile = CreateFileMappingA (-1, 0, 4, 0, 文本长度, 指针名)’内存文件映射对象
LPSTR = MapViewOfFile (hMemFile, 2, 0, 0, 0) ‘ FILE_MAP_WRITE = 2‘
将待置入的文本写到内存中,用完共享内存,再调用 UnmapViewOfFile 回收内存地址空间UnmapViewOfFile (LPSTR)

3、B进程中读取该内存地址:

hMemFile = OpenFileMappingA (4,True, Lpname)’打开文件映射对象
LPSTR = MapViewOfFile (hMemFile, 4, 0, 0, 0) ‘ FILE_MAP_READ = 4‘MapViewOfFile函数来映射该内存地址
读取指针上数据到文本,再调用UnmapViewOfFile回收内存地址空间UnmapViewOfFile (LPSTR)

 

相关链接:

1、Windows 下的进程间通讯及数据共享:

http://blog.codingnow.com/2005/10/interprocess_communications.html

2、win32下进程间通信——共享内存

http://blog.csdn.net/sszgg2006/article/details/8573348

2、Windows编程专家张静盛指点进程间通信

http://developer.51cto.com/art/200807/82340_all.htm

Comments (0)

斗牛SEO工具