创建界面中表格及获得网卡列表、对话框初始化的代码如下:
BOOL CNetHackerKillDlg::OnInitDialog() {
CDialog::OnInitDialog();
// Add \
// 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 int i = 0;
char errbuf[PCAP_ERRBUF_SIZE]; /* 取得列表 */
if (pcap_findalldevs(&alldevs, errbuf) == - 1) {
MessageBox(\获得网络适配器列表失败,请确认您正确安装了WINPCAP!\网络黑手\MB_ICONEXCLAMATION);
GetDlgItem(IDC_STARTSTOP_BUTTON)->EnableWindow(FALSE); }
/* 输出列表 */
for (d = alldevs; d; d = d->next) {
CString str(d->name);
if (str.Find(\ m_adapterList.AddString(str); }
m_hostList.Create(CRect(12, 114, 435, 322), this, 1000); m_hostList.SetCols(4); m_hostList.SetRows(16);
for (i = 0; i < 16; i++) {
m_hostList.SetRowHeight(i, 13); for (int j = 0; j < 5; j++) {
m_hostList.SetAlignment(i, j, DT_CENTER); } }
m_hostList.SetColWidth(0, 120); m_hostList.SetColWidth(1, 140); m_hostList.SetColWidth(2, 100); m_hostList.SetColWidth(3, 62); m_hostList.SetColWidth(4, 62);
m_hostList.SetText(0, 0, \地址\ m_hostList.SetText(0, 1, \地址\ m_hostList.SetText(0, 2, \是否网络黑手\ m_hostList.SetText(0, 3, \黑手状态\
return TRUE; // return TRUE unless you set the focus to a control }
简单的修改ARP请求函数的目标地址:
void SendArpReq(unsigned long srcIp,unsigned long desIp,UCHAR * srcMac) { //…
eth.eh_dst[5]=0xfe; //… }
GetData()函数则不再需要侦听报文:
void GetData(LPPACKET lp) {
ULONG ulbytesreceived, off; ETHDR *eth; ARPHDR *arp;
char *buf, *pChar, *base; struct bpf_hdr *hdr;
ulbytesreceived = lp->ulBytesReceived; buf = (char*)lp->Buffer;
off = 0;
while (off < ulbytesreceived) {
hdr = (struct bpf_hdr*)(buf + off); off += hdr->bh_hdrlen;
pChar = (char*)(buf + off); base = pChar;
off = Packet_WORDALIGN(off + hdr->bh_caplen);
eth = (PETHDR)pChar;
arp = (PARPHDR)(pChar + sizeof(ETHDR));
if (eth->eh_type == htons(ETH_IP)) {
continue; }
else if (eth->eh_type == htons(ETH_ARP)) {
if (arp->arp_tpa == htonl(myip) && arp->arp_opt == htons(ARP_REPLY)) { int i;
for (i = 0; i < currentHstIndex; i++) {
if (hostList[i].ip == arp->arp_spa) { break; } }
if (i >= currentHstIndex) {
hostList[currentHstIndex].ip = arp->arp_spa;
memcpy(hostList[currentHstIndex].mac, eth->eh_src, 6); currentHstIndex++; } }
else if (arp->arp_spa == htonl(myip) && arp->arp_opt == htons(ARP_REPLY)) memcpy(mmac, eth->eh_src, 6); } } }
如何判断处于混杂模式的主机是否使用的是\网络黑手\呢?又如何终止对方\网络黑手\的使用呢?道理很简单,我们只需要在\网络黑手\与\网络黑手终结者\之间约定一套通信协议,按照该协议进行控制。剩下的工作留给读者朋友了。
3、攻防演示
下面的界面显示了搜索局域网内192.168.1.1~192.168.1.30范围内的节点并侦听192.168.1.2,我们简单的抓一些报文后按下\停止\,看看其中的一个TCP报文,简单的信息让我们看出对方正在上http://www.sina.com.cn这个网页。
我们完全可以把网络黑手做的更牛X一点,对应用层报文进行分析,从而完整地监视目标的行为。
现在我们给目标192.168.1.2 伪造ARP报文让其一直被提示IP冲突\地址与网络上的其他系统有冲突\,抓图如下:
我们用\或者\网络黑手终结者\都可以扫描出局域网内处于混杂模式的主机,如果确定对方使用的是\网络黑手\,在表格的黑手状态项目对应的行里双击,就会给\网络黑手\发送终止报文,\网络黑手\软件将自动关闭。
洪水攻击原理及代码实现全攻略(附源代码)
一、 什么是洪水攻击
洪水之猛、势不可挡。如果将洪水比作对计算机的攻击,那大家可以想象得出,攻击是多的猛烈。
在安全领域所指的洪水攻击是指向目标机器发送大量无用的数据包,使得目标机器忙于处理这些无用的数据包,而无法处理正常的数据包。在攻击过程中,目标机器的CPU的使用率将高于正常值,有时甚至会达到100%。这样将使目标机器的性能急剧下降。这有些象我们在日常生活中的电话,如果要使某个电话瘫痪,就不停地拨这个电话的号码,那么其它的电话就无法拨通这个电话,当然,要想不接到骚扰电话,唯一的方法是将电话线拔了。同样,要想计算机完全避免洪水攻击的唯一方法,就是不让这台计算机上网,更直接的就是将网线拔了。
二、 洪水攻击的原理
洪水攻击也称为拒绝服务攻击。可以有很多种方式进行这种攻击,本文主要讨论比较常用的利用TCP三次握手的漏洞来耗尽计算机资源的方式来进行攻击。
那么什么是TCP的三次握手呢?其实原理很简单。这要从TCP的连接过程说起。我们一般使用Socket API来进行TCP连接。要做的只是将IP或计算机名以及端口号传入connect函数,如果参数正确,目标