‘壹’ 如何抓取一个局域网的所以的网络流量数据包
1、使用网络嗅探工具,也就是俗称sniffer的工具,这类工具有很多,有专业的sniffer pro,也有iris的抓包工具,还有许多简单点的。这种是通过抓取低层数据包,并根据上层HTTP、FTP、MAIL等协议解码,功能强弱跟软件有关。
2、原理就是将我们的网卡设置为混杂模式。我们知道网卡在链路层通信时的地址是MAC,网卡根据目标的MAC地址来确认是不是发给自己的包。在混杂模式下,网卡会接收所有网络中的数据包,不管是不是发给自己的。这样就可以得到网络中的所有数据了。
3、问题是在交换机环境下,交换机会首先分析MAC地址,然后只把数据包转发到对应的端口去。这样一来,除了广播包和多播包,我们的网卡只能接收到发给自己的数据包了,混杂模式下也无效了。
4、为了解决3这种问题,就分别针对交换机的工作原理和链路层通信的原理提出了不同的解决办法。比如通过发送大量的广播包,造成广播风暴,造成交换机没有更多能力来处理上层数据的分析工作,迫使交换机工作在物理层,相当于成了一个HUB,就会在所有端口中转发所有的数据包。另一种是中间人攻击,即伪造通信双方的MAC同时向双方发信,使双方都把我们误以为是对方,从而将要发到对方的数据包发送给我们,我们在收到的同时再给过处理转发给真正的接受方,这样就得到数据了。如果能够把自己伪装成网关,所有的对外通信就都能拿到了。
5、在无线传输的情况下,电波总是在公共区域传播的,所以必须要对数据进行加密才能保证安全,根据等级和需要可以使用不同的加密方式。这时候也有专门针对无线的sniffer工具,至于能不能解密破解,就需要一点运气了。
6、这是低层的,还可以根据各层协议原理,有针对性的把自己伪装成需要的角色,从而获取到相关信息。比如可以伪装成DNS、邮件服务器等等。
7、道高一尺、魔高一丈,有漏洞就有解决办法。比如对交换机进行专门的设置,在风暴时使用保守的丢包处理方式,或者绑定到IP地址,或者应用层的HTTPS、DNS扩展协议。总是在攻守当中向前发展。
‘贰’ 232转网口后连接电脑可以直接读取数据吗
232转网口后连接电脑可以直接读取数据。首先点击电脑桌面左下角的【开始菜单】按钮,打开开始菜单。然后在里面点击【控制面板】按钮,打开控制面板。然后在控制面板界面,点击【添加打印机然后会打开添加打印机窗口,点击下面的添加网络打印机。然后可以自动搜索网络打印机,将要连接的打印机搜索出来,点击将其选中。
读取数据方法
可以点击【我需要的打印机不在列表中】按钮,在里面按照名称或者TCP/IP或主机名查找网络打印机,在点击选中,点击【下一步】。
然后在里面配置好主机或IP,以及连接的借口,将这些配置完毕点击【下一步】,最后完成窗口设置就可以连接无线打印机成功,我们就可以使用这个电脑,使用无线打印机上打印了。
‘叁’ windows用c语言怎么直接从网口接收数据,不用建立tcp连接
因为不太了解GOOSE协议,几分钟简单google了一下,wikipedia上说的语焉不详,是这样的,在windows平台,用户态都是通过socket进行网络通信的,但socket是位于tcp/ip之上的一套操作接口,它可以操作tcp/udp数据,也可以通过raw方式操作ip数据,但无论如何,都在网络层之上,如果GOOSE协议不是tcp/ip之上的协议,那么就得写ndis协议驱动了,以在pc侧网卡设备之上支持这种协议(或者幸运的话,对端设备提供了windows平台的驱动那更好,如果是这样,则查看用户手册,如何使用它)
‘肆’ 怎么从接口里获取数据、、
不如考虑联合编程,用别的软件读取,再经matlab处理
Matlab是否支持调用usb接口,就像调用串口一样
方法一:使用
VC++
提供的串行通信控件
MSComm
首先,在对话框中创建通
信控件,若
Control
工具栏中缺少该控件,可通过菜单
Project
–
> Add to
Project
–
> Components and Control
插入即可,再将该控件从工具箱中拉
到对话框中。此时,你只需要关心控件提供的对
Windows
通讯驱动程序的
API
函数的接口。
换句话说,
只需要设置和监视
MSComm
控件的属性和事件。
在
ClassWizard
中为新创建的通信控件定义成员对象(
CMSComm
m_Serial
),通过该对象便可以对串口属性进行设置,
MSComm
控件共有
27
个属性,这里只介绍其中几个常用属性:
CommPort
设置并返回通讯端口号,缺省为
COM1
。
Settings
以字符串的形式设置并返回波特率、
奇偶校验、
数据位、
停止位。
PortOpen
设置并返回通讯端口的状态,也可以打开和关闭端口。
Input
从接收缓冲区返回和删除字符。
Output
向发送缓冲区写一个字符串。
InputLen
设置每次
Input
读入的字符个数,
缺省值为
0
,
表明读取接收缓
冲
区中的全部内容。
InBufferCount
返回接收缓冲区中已接收到的字符数,将其置
0
可以清除
接收缓
冲区。
InputMode
定义
Input
属性获取数据的方式(为
0
:文本方式;为
1
:二
进制方式)。
RThreshold
和
SThreshold
属性,表示在
OnComm
事件发生之前,
接收缓冲区或发送缓冲区中可以接收的字符数。
以下是通过设置控件属性对串口进行初始化的实例:
BOOL CSampleDlg:: PortOpen()
{
BOOL m_Opened;
……
m_Serial.SetCommPort(2); //
指定串口号
m_Serial.SetSettings(“4800,N,8,1″); //
通信参数设置
m_Serial.SetInBufferSize(1024); //
指定接收缓冲区大小
m_Serial.SetInBufferCount(0); //
清空接收缓冲区
m_Serial.InputMode(1); //
设置数据获取方式
m_Serial.SetInputLen(0); //
设置读取方式
m_Opened=m_Serail.SetPortOpen(1); //
打开指定的串口
return m_Opened;
}
打开所需串口后,
需要考虑串口通信的时机。
在接收或发送数据过程中,
可
能需要监视并响应一些事件和错误,
所以事件驱动是处理串行端口交互作用的一
种非常有效的方法。
使用
OnComm
事件和
CommEvent
属性捕捉并检查通
讯事件和错误的值。发生通讯事件或错误时,将触发
OnComm
事件,
CommEvent
属性的值将被改变,应用程序检查
CommEvent
属性值并作出
相应的反应。在程序中用
ClassWizard
为
CMSComm
控件添加
OnComm
消
息处理函数:
void CSampleDlg::OnComm()
{
……
设数据发送时间间隔
TimeCycle
相同的定时器:
SetTimer(1,TimeCycle,NULL)
,进行定时读取或发送。
CSampleView:: OnTimer(UINT nIDEvent)
{
char InputData[30];
m_Serial.ReadData(InputData,30);
//
数据处理
}
若对端口数据的响应时间要求较严格,
可采用事件驱动
I/O
读写,
Windows
定义了
9
种串口通信事件,较常用的有:
EV_RXCHAR:
接收到一个字节,并放入输入缓冲区。
EV_TXEMPTY:
输出缓冲区中的最后一个字符发送出去。
EV_RXFLAG:
接收到事件字符
(DCB
结构中
EvtChar
成员
)
,放入输入缓
冲区。
在用
SetCommMask()
指定了有用的事件后,应用程序可调用
WaitCommEvent()
来等待事件的发生。
SetCommMask(hComm,0)
可使
WaitCommEvent()
中止。
方法三
多线程下实现串行通信
方法一,
二适用于单线程通信。
在很多工业控制系统中,
常通过扩展串口连
接多个外设,
各外设发送数据的重复频率不同,
要求后台实时无差错捕捉,
采集,
处理,记录各端口数据,这就需要在自定义的串行通信类中创建端口监视线程,
以便在指定的事件发生时向相关的窗口发送通知消息。
线程的基本概念可详见
VC++
参考书目,
Windows
内部的抢先调度程序在
活动的线程之间分配
CPU
时间,
Win 32
区分两种不同类型的线程,一种是用
户界面线程
UI
(
User Interface Thread
)
,
它包含消息循环或消息泵,用于处
理接收到的消息;另一种是工作线程(
Work Thread
),它没有消息循环,用
于执行后台任务。用于监视串口事件的线程即为工作线程。
多线程通信类的编写在端口的配置,
连接部分与单线程通信类相同,
在端口
配置完毕后,
最重要的是根据实际情况,
建立多线程之间的同步对象,
如信号灯,
临界区,事件等,相关细节可参考
VC++
中的同步类。
一切就绪后即可启动工作线程:
CWinThrea *CommThread = AfxBegin
Thread(CommWatchThread, //
线程函数名
(LPVOID) m_pTTYInfo, //
传递的参数
THREAD_PRIORITY_ABOVE_NORMAL, //
设置线程优先级
(UINT) 0, //
最大堆栈大小
(DWORD) Create_SUSPENDED , //
创建标志
(LPSECURITY_ATTRIBUTES) NULL); //
安全性标志
同时,在串口事件监视线程中:
if(WaitCommEvent(pTTYInfo->idComDev,&dwEvtMask,NULL))
{
if((dwEvtMask & pTTYInfo->dwEvtMask )== pTTYInfo->dwEvtMask)
{
WaitForSingleObject(pTTYInfo->hPostEvent,0xFFFFFFFF);
ResetEvent(pTTYInfo->hPostEvent); //
置同步事件对象为非信号态
::PostMessage(CSampleView,ID_COM1_DATA,0,0); //
发送通知消息
}
}
用
PostMessage()
向指定窗口的消息队列发送通知消息,相应地,需要在
该窗口建立消息与成员函数间的映射,用
ON_MESSAGE
将消息与成员函数名
关联。
BEGIN_MESSAGE_MAP(CSampleView, CView)
//{{AFX_MSG_MAP(CSampleView)
ON_MESSAGE(ID_COM1_DATA, OnProcessCom1Data)
ON_MESSAGE(ID_COM2_DATA, OnProcessCom2Data)
…..
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后在各成员函数中完成对各串口数据的接收处理,
但必须保证在下一次监
测到有数据到来之前,
能够完成所有的中间处理工作。
否则将造成数据的捕捉错
误。
多线程的实现可以使得各端口独立,
准确地实现串行通信,
使串口通信具有
更广泛的灵活性与严格性,且充分利用了
CPU
时间。但在具体的实时监控系统
中如何协调多个线程,
线程之间以何种方式实现同步也是在多线程串行通信程序
实现的难点。
一个读串口的函数:
HANDLE m_hIDComDev;
int ReceiveComm(char* RecCommData)
{
DWORD dRead,dReadNum;
COMSTAT ComStat;
LPDWORD ComError;
char *Data;
ClearCommBreak(m_hIDComDev);
ClearCommError(m_hIDComDev,ComError,&ComStat);
dRead=ReadFile(m_hIDComDev, Data, ComStat.cbInQue,
&dReadNum, NULL); //
接收
200
个字符
//dReadNum
为实际接收字节数
PurgeComm(m_hIDComDev,PURGE_RXCLEAR);//
清空接收缓冲区
for(int i = 0 i < ComStat.cbInQue; i++)
{
*RecCommData = *Data;
RecCommData++;
Data++;
}
*RecCommData = ‘
\
0′;
if(dRead)
return 1;
else
return 0;
}
VC
不是语言
,VC
是编程环境
,C,C++
是编程语言
,VC
中编写
C,C++
是比较方便的
,
较好的环境
.
vc
编程源程序要求用
C++
语言来编写
,
在这裏写一下
C++
语言就可以了吧
!
C++
支持面向对象的程序设计方法
,
并可以使用
MS
的
MFC,
所开发的软件稳定性好
,
可移植性
强
,
软件与硬件相互独立
.C++
也是一种混合型的程序设计语言
,
既可以支持传统的面向过程的
程序设计
,
也支持现在的面向对象的程序设计
(
面向对象的方法实现了软件的重用问题
,
加速
了软件的开发过程
),C++
既适合作为系统软件的描述语言也适合应用软件的开发语言
,
与
C
语
言比它的错误检查机制更强
,
还提供了相关的检查类
,
以编写模块化程度高
,
可重用性和可维
护性佳更适合于大
,
中型程序的开发
.
百新安阳 董行
‘伍’ 怎样 根据ip和端口远程访问电脑,进行数据采集
一、以windows系统为例查看IP和远程连接端口的方法:
1.窗口键+R,输入cmd回车
2.输入ipconfig 看到IP地址
netstat -ano看到端口号
备注:端口和机器上运行的软件有关,不同的软件端口不一样的.例如浏览网页使用80号端口.机器上端口号可能会很多,因为你运行的程序会很多。
二、以linux系统为例查看IP和远程连接端口的方法:
运行中输入ifconfig看IP地址
输入netstat看端口
‘陆’ 通过IP或者网络端口能不能是实现类似于电话呼叫转移的技术从而获取数据为什么能或者为什么不能
可以,中间人攻击就是这样的。中间人伪装成你的默认网关,这样你就把所有数据都发给他了,此时中间人把数据都记录下来,然后再转给真正的默认网关,实现数据发送;然后这个中间人同时再伪装成你,骗网关把原本发给你的数据再发给中间人,他把数据记录下以后再次发给你,这样他便截取了你的所有数据,但是你却无法意识到数据已被截取。
还有就是通过交换机的端口镜像把你的那个端口数据完整的备份发送到目的机器,然后分析。
‘柒’ 获取电脑网络传输数据
您好,方法:
1,先将两台电脑开机,然后用网线连接起来,直接插在平时上网用的端口。
2,先找到电脑里需要传送的文件。然后设置共享。比如现在要传送一个磁盘里的文件到另一台电脑上,那我先设置这个磁盘为共享,当然也可以是一个文件夹。方法:选中文件夹,右键单击,点击共享,依次操作。
3,设置完共享之后查询ip地址:方法,在运行里输入cmd,点击确定,再在弹出的窗口里输入ipconfig,然后按回车键,这样就可以看到ip了,并且记下这个ip。
4,将之前查看到的ip地址在另一台电脑里的“运行”里输入。格式:\\169.254.85.234 然后点击确定。
5,点确定之后,就可以连接到了两台电脑了,并且可以看到之前共享的文件。可以选择文件,右键进行复制到本地电脑的磁盘中了。
6,可以打开本地磁盘,右键进行复制粘贴,达到文件传送的目的。此方法可以用来传送还原系统备份文件,也可以用来共享局域之间的文件。
‘捌’ QT怎么获取某个网络端口信号来源的IP地址,并可以在已有的数据库中搜索该IP地址含有的信息,用哪些语句
1。QHostInfo类获取主机名和ip地址
(1)获取主机名: QHostInfo::localHostName()
QString localHostName=QHostInfo::localHostName();
(2)获取ip地址: QHostInfo info=QHostInfo::fromName(localHostName);//根据上边获得的主机名来获取本机的信息
info.addresses();//QHostInfo的address函数获取本机ip地址
如果存在多条ip地址ipv4和ipv6:
foreach(QHostAddress address,info.addresses())
{
if(address.protocol()==QAbstractSocket::IPv4P)//只取ipv4协议的地址
qDebug()<<address.toString();
}
如果是ipv6地址,可以使用QAbstractSocket::ipv6Protocol来实现。
QHostAddress类是管理ip地址的类,所有的ip都归这个类管理。
‘玖’ 如何从某个IP端口读取数据包,并存入数据库
问题:第2步骤的数据包是ASCII的字符,在第4步骤中,假设服务器的IP是192.168.0.23;端口号是1455,我如何将这些数据包记录下来,存到数据库库中呢?请老师帮我一下。
只有数据存好了,我才能去用FOXTABLE去编写客户端。
‘拾’ 如何获取tcp的端口和其它数据
2、在弹出的“Internet协议(TCP/IP)”对话框中点击[高级]按钮。在弹出的“高级TCP/IP设置”中,选择“选项”标签,选中“TCP/IP筛选”,然后点击[属性]按钮。
3、在弹出的“TCP/IP筛选”对话框里选择“启用TCP/IP筛选”的复选框,然后把左边“TCP端口”上的“只允许”选上(请见附图)。
这样,您就可以来自己添加或删除您的TCP或UDP或IP的各种端口了。添加或者删除完毕,重新启动机器