首先安装编译环境,ubnutu16.04,然后安装
安装编译环境
sudoapt-get install build-essential asciidoc binutils bzip2 gawk gettext gitlibncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtplibssl-dev texinfo libglib2.0-dev
建立工作目录
mkdir lede
进入工作目录
cd lede
下载源码
进入源码目录
cd source
修改内容如下:
1、
/source/target/linux/bcm53xx/image/Makefile文件尾部(最后一行依然在最后)添加如下内容
defineDevice/phicomm-k3
DEVICE_TITLE:= PHICOMM K3
DEVICE_PACKAGES:= $(BRCMFMAC_4366C0)$(USB3_PACKAGES) phicommk3-firmware k3screenctrl
IMAGES :=trx
endef
TARGET_DEVICES+=phicomm-k3
2、此部分用了Hill-98的无线部分,编译完成后/lib/firmware文件夹下有对应的驱动
复制LEDE-source/package/firmware/phicommk3-firmware文件夹到
source/package/firmware/phicommk3-firmware
3、此部分用了updateing的屏幕显示部分
复制lede/package/utils/k3screenctrll文件夹到source/package/utils/k3screenctrl
⑵ nat1会降低延迟吗
设置好了可以降低的。
-网络环境:
我这边的网络环境,电信189套餐一共送了20条宽带。其中1条300M下30M上,1条100M下20M上,还有18条是50M下10M上,一条100M对等的联通,在加上后期拉的2条500M电信对等,所以家里一共是23条宽带,都为公网IP。3个电信光猫,1个联通光猫,若干路由器,交换机。
-CDN节点共享(闲置流量换钱):
早期,我网络环境没这么多,就玩迅雷的红水晶,再到迅雷路由,再到赚钱宝再到玩客云,可以说是一路走来。其中一代赚钱宝和赚钱宝pro挂的最久,后来不赚钱,就卖掉了大部分,玩客云因为网络的限制,留了几台,大部分抢到就是当倒爷。既然宽带这么多条,涉及到多线多拨,铁定上软路由,选爱快,操作简便,分流效果都挺好。既然有这么多闲置的带宽,刚好玩客云出现了现金,买几台试下,加上宽带提速加成,效果不错,于是就买了20几台,赚点小钱,毕竟穷。
-开始出现问题:
没想这玩意是真的能跑,20多台设备上传流量量速率达到了千兆,我用了几年的3215U 4口的软路由,开始不堪重负,100%的干活,也不知道是不是开繁星导致,反正感觉吃不消,但是上网啥的没问题,但是过了一阵子,发现当ap的ac88u,wifi开始不稳,会掉线,然后比较难连上。这让喜欢吃鸡的女王大人无法忍受,显然,挨骂是一定的。一开始以为是86u断流,用排除法,加上acrh17当ap,问题依旧,看来是就是软路由的锅。刚好电信有个500M对等的优惠套餐,果断办理,为了不受千兆端口限制,让电信小哥,再拉一条光纤,此时家里已经有了4个光猫了,电信3个,联通1。4口的软路由端口开始不够用了。宽带太多,很容易达到千兆瓶颈,一个光猫1G的带宽。
-性能不够硬件来凑
刚好同事需要软路由,把3215u出了。手头上还有dq77kb+e3 1265l v2,买个4口网卡当软路由,年少不懂事,上了淘宝买了i350-t4(寨卡)。不过还好用着没问题。这下性能应该不会瓶颈了,然而,wifi有时会连不上的问提依旧,看来是爱快的bug了,但是爱快用了好多年了,好多配置都在里面,如果换固件,调配置,比如ddns,端口转发,分流啥的,就要弄好久。但是wifi的问题不能不解决,刚好在群里看到有人说爱快,当设备跑多了,就会出现这个情况,上个三层交换机就会解决问题。那就上某鱼淘个二手的三层交换机来试试吧。后来看到群里有有人提到nat类型,对提高收益有帮助。于是大致了解了下,给大伙贴下。
-Nat类型
1. Full Cone NAT(简称NAT1):
所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全。
2. Restricted Cone NAT(简称NAT2):
它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安全性。
3. Port Restricted Cone NAT(简称NAT3):
它是Restricted ConeNAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性。
4. Symmetric NAT(简称NAT4):
这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关。
上面是我网络出来,反正只要认为nat1是最好的就行,根据我的经验来说,像爱快,高恪之类的软路由都是nat4,。Lede可以nat1,而平常普通路由拨号的nat类型为3,刷高恪和openwrt就可以做到nat1。当然只要你路由器做了dmz也是可以变成nat1,但是这个只能指定内网的一个主机,你多台的就不行。那nat1对提高收益有帮助吗?对此,我还专门做了测试,拿出矿渣newifi3,编译了对应的openwrt固件,感谢lean大雕的源码,开始挂上,做为期几天的测试,结论是确实可以提高收益,而且对p2p游戏下载啥的也有帮助。
-目前支持nat1固件:
openwrt系列,理论能刷的openwrt都可以
k2p高恪固件,
acrh17也可以刷改版梅林实现full cone(感谢大雕的固件,该有的功能都有。)
梅林固件,目前只有新内核才支持,例如ac86u,ax88u。
⑶ 求 VC++编写的文件夹加密软件代码 [email protected]
// AesCodeDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AesCode.h"
#include "AesCodeDlg.h"
#include "Aes.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum ;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAesCodeDlg dialog
CAesCodeDlg::CAesCodeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAesCodeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAesCodeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAesCodeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAesCodeDlg)
DDX_Control(pDX, IDC_EnDeProg, m_prog);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAesCodeDlg, CDialog)
//{{AFX_MSG_MAP(CAesCodeDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BAesEn, OnBAesEn)
ON_BN_CLICKED(IDC_BAesDe, OnBAesDe)
ON_BN_CLICKED(IDC_BFile, OnBFile)
ON_BN_CLICKED(IDC_BFileEn, OnBFileEn)
ON_BN_CLICKED(IDC_BFileDe, OnBFileDe)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAesCodeDlg message handlers
BOOL CAesCodeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
SetDlgItemText(IDC_EAesEn,"0123456789abcdef");
EnDe_filename="";
m_prog.SetRange(0,100);
m_prog.SetPos(0);
return TRUE; // return TRUE unless you set the focus to a control
}
void CAesCodeDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CAesCodeDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CAesCodeDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes字符串加密
void CAesCodeDlg::OnBAesEn()
{
// TODO: Add your control notification handler code here
unsigned char inBuff[25],ouBuff[25];
memset(inBuff,0,25);
memset(ouBuff,0,25);
Aes aes(24,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");
GetDlgItemText(IDC_EAesEn,(char*)inBuff,24);
if(strlen((char*)inBuff)>16)MessageBox("本例只能加密16字节的字符串,大于截断");
aes.Cipher(inBuff,ouBuff); //因为输出为16个字节,每个字节用两个字母或数字表示。
CString str="",strTmp; //实际输出是32个字母或数字,否则ASCII码值超出127的会变成乱码。
for(int i=0;i<16;i++)
{
strTmp.Format("%02x",ouBuff[i]); //其实相当于把ouBuff的ASCII值这个数字以16进制的形式输出
str+=strTmp;
}
//MessageBox(str,"加密后");
SetDlgItemText(IDC_EAesEn,str);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes字符串解密
void CAesCodeDlg::OnBAesDe()
{
// TODO: Add your control notification handler code here
unsigned char inBuff[33],ouBuff[25]; //还是要注意32个字符的字符串需要用33个字节来存储,
//因为有个结束符,太恶心了
memset(inBuff,0,32);
memset(ouBuff,0,25);
Aes aes(24,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17");
GetDlgItemText(IDC_EAesEn,(char*)inBuff,33);
unsigned char temp[25];
for(int j=0;j<16;j++)
{
temp[j]=char2num(inBuff[2*j])*16+char2num(inBuff[2*j+1]);// 将字符字面表示的16进制ASCII码值转换成真正的ASCII码值
}
aes.InvCipher(temp,ouBuff);//"dda97ca4......ec0d7191"
SetDlgItemText(IDC_EAesDe,CString(ouBuff));
}
////////////////////////////////////////////////////////////////////////////////////////////////
//字符ASCII码值到字符字面值的转换 如 '0'转换成0, 'a'转换成10
int CAesCodeDlg::char2num(char ch)
{
if(ch>='0'&&ch<='9')return ch-'0';
else if(ch>='a'&&ch<='f')return ch-'a'+10;
return -1;
}
////////////////////////////////////////////////////////////////////////////////////////////////
//文件选择框
void CAesCodeDlg::OnBFile()
{
// TODO: Add your control notification handler code here
CFileDialog fdlg(1,NULL,NULL,OFN_HIDEREADONLY ,"All Files(*.*)|*.*||");
if(IDOK!=fdlg.DoModal())return;
EnDe_filename=fdlg.GetPathName();
SetDlgItemText(IDC_EFile,EnDe_filename);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes文件加密
void CAesCodeDlg::OnBFileEn()
{
// TODO: Add your control notification handler code here
if(EnDe_filename=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
MessageBox("文件打开错误","出错",MB_OK);
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput); //ftell()函数返回文件位置指示符的当前值,即如果现在是在文件结尾,则这个值就是文件长度
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
EnDe_filename+=".en";
foutput=fopen((LPCTSTR)EnDe_filename,"wb");
if(!foutput)
{
MessageBox("文件打开错误","出错",MB_OK);
fclose(finput);
return;
}
unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput); //读取16个对象,每个对象的长度是1字节
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
m_prog.SetPos(int(100*i/blocknum)); //加密进度条进度设置
}
if(leftnum)
{
memset(inBuff,0,16);
fread(inBuff,1,leftnum,finput);
aes.Cipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
}
fclose(finput);
fclose(foutput);
MessageBox("加密成功!");
SetDlgItemText(IDC_EFile,EnDe_filename);
m_prog.SetPos(0);
}
////////////////////////////////////////////////////////////////////////////////////////////////
//Aes文件解密
void CAesCodeDlg::OnBFileDe()
{
// TODO: Add your control notification handler code here
if(EnDe_filename=="")return;
FILE* finput;
FILE* foutput;
finput=fopen((LPCTSTR)EnDe_filename,"rb");
if(!finput)
{
MessageBox("文件打开错误","出错",MB_OK);
return;
}
fseek(finput,0,SEEK_END);
long lFileLen=ftell(finput); //ftell()函数返回文件位置指示符的当前值,即如果现在是在文件结尾,则这个值就是文件长度
fseek(finput,0,SEEK_SET);
long blocknum=lFileLen/16;
long leftnum=lFileLen%16;
EnDe_filename+=".de";
foutput=fopen((LPCTSTR)EnDe_filename,"wb");
if(!foutput)
{
MessageBox("文件打开错误","出错",MB_OK);
fclose(finput);
return;
}
unsigned char inBuff[25],ouBuff[25];
Aes aes(16,(unsigned char*)"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf");
for(long i=0;i<blocknum;i++)
{
fread(inBuff,1,16,finput); //读取16个对象,每个对象的长度是1字节
aes.InvCipher(inBuff,ouBuff);
fwrite(ouBuff,1,16,foutput);
m_prog.SetPos(int(100*i/blocknum)); //加密进度条进度设置
}
if(leftnum)
{
MessageBox("文件可能已损坏或非经aes加密过");
}
fclose(finput);
fclose(foutput);
MessageBox("解密成功!");
SetDlgItemText(IDC_EFile,EnDe_filename);
m_prog.SetPos(0);
}
要源程序和全部代码给我邮箱我给你发过去。
⑷ 家用ikuai还是lede
iKuai。
双软路由主要原因是Lede稳定性以及安全性不够,爱快流控好相对稳定一点。
LEDE具有强大的插件扩展能力,作为Openwrt的发行版之一,其本身有着丰富的插件工具支持,同时也非常适合有能力的玩家自己编译自己的路由系统,好用的插件(出国留学+广告拦截)和强大易用的编译扩展能力是其特色,iKuai的特色在于其出色稳定的单线多拨功能和流控分流功能,这使之更加贴近真正的路由器设备,从而被大多数玩家应用为主路由,通过单线多拨功能,可以完成宽带叠加的效果,对于有大带宽需求的用户来说是非常好的选择。