c#下怎么获得远程主机发到本机的数据包?

问题描述

假设已知远程主机的IP地址和端正口号,如何获得它往本机发送的数据包?需要用的那些技术,谢谢

解决方案

解决方案二:
在csdn上原来的帖子里搜索到的winpcap做的#pragmaonce#include<list>#include"pcap.h"#pragmapack(push,1)structip_address{u_charbyte1;u_charbyte2;u_charbyte3;u_charbyte4;};/*IPv4header*/structip_header{u_charver_ihl;//Version(4bits)+Internetheaderlength(4bits)u_chartos;//Typeofserviceu_shorttlen;//Totallengthu_shortidentification;//Identificationu_shortflags_fo;//Flags(3bits)+Fragmentoffset(13bits)u_charttl;//Timetoliveu_charproto;//Protocolu_shortcrc;//Headerchecksumip_addresssaddr;//Sourceaddressip_addressdaddr;//Destinationaddressu_intop_pad;//Option+Padding};structtcp_header{//TransportControlProtocolheaderu_shortth_sport;//sourceportu_shortth_dport;//destinationportintth_seq;//sequencenumber-32bitsintth_ack;//acknumber-32bits//unusedanddataoffset!u_charth_x2:4,th_off:4;//Controlbits,6bits[fromlefttoright]u_charth_flags;#defineTH_FIN0x01#defineTH_SYN0x02#defineTH_RST0x04#defineTH_PUSH0x08#defineTH_ACK0x10#defineTH_URG0x20#defineTH_ECE0x40#defineTH_CWR0x80#defineTH_FLAGS(TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)u_shortth_win;//windowu_shortth_sum;//checksumu_shortth_urp;//urgentpointer};/*UDPheader*/structudp_header{u_shortsport;//Sourceportu_shortdport;//Destinationportu_shortlen;//Datagramlengthu_shortcrc;//Checksum};#pragmapack(pop)classPacketInfo{public:ip_addresssrcaddr;ip_addressdstaddr;unsignedshortsrcport;unsignedshortdstport;std::stringdatas;std::stringtimestr;intlen;};classSnifferThread{public:SnifferThread(){}~SnifferThread(){}voidbegin(){DWORDthreadid=0;_handle=(HANDLE)CreateThread(NULL,0,ThreadFunc,this,0,&threadid);}boolget_one_packet(PacketInfo&clone){_lock.Lock();if(_packets.empty()){_lock.Unlock();returnfalse;}clone=(*_packets.begin());_packets.pop_front();_lock.Unlock();returntrue;}private:voidstart(){is_stop=false;}voidstop(){is_stop=true;_lock.Lock();_packets.clear();_lock.Unlock();}voidterm(){TerminateThread(_handle,1);}voidrun(){pcap_if_t*alldevs;charerrbuf[PCAP_ERRBUF_SIZE];if(pcap_findalldevs(&alldevs,errbuf)==-1){MessageBox(NULL,"打开设备出错","错误",MB_OK);return;}for(pcap_if_t*d=alldevs;d;d=d->next){pcap_t*adhandle=pcap_open_live(d->name,4096,1,1000,errbuf);if(adhandle!=NULL){_cap_handles.push_back(adhandle);structbpf_programfcode;bpf_u_int32NetMask=0xffffff;if(d->addresses!=NULL)/*Retrievethemaskofthefirstaddressoftheinterface*/NetMask=((structsockaddr_in*)(d->addresses->netmask))->sin_addr.S_un.S_addr;char*filter="tcpport25ortcpport110";pcap_compile(adhandle,&fcode,filter,1,NetMask);pcap_setfilter(adhandle,&fcode);}}if(_cap_handles.empty()){MessageBox(NULL,"无设备可用","错误",MB_OK);return;}while(true){if(is_stop){SleepEx(1000,TRUE);continue;}for(std::list<pcap_t*>::iteratorit=_cap_handles.begin();it!=_cap_handles.end();it++){structpcap_pkthdr*header;constu_char*pkt_data;pcap_t*curhandle=*it;intres=pcap_next_ex(curhandle,&header,&pkt_data);//=0是超时if(res>0){structtm*ltime=localtime(&header->ts.tv_sec);;chartimestr[16];strftime(timestr,sizeoftimestr,"%H:%M:%S",ltime);ip_header*ih=(ip_header*)(pkt_data+14);intip_len=(ih->ver_ihl&0xf)*4;tcp_header*th=(tcp_header*)((u_char*)ih+ip_len);PacketInfopacketinfo;packetinfo.timestr=timestr;packetinfo.srcaddr=ih->saddr;packetinfo.dstaddr=ih->daddr;packetinfo.srcport=th->th_sport;packetinfo.dstport=th->th_dport;packetinfo.len=header->len-14-ip_len-th->th_off*4;intdatasize=header->caplen-14-ip_len-th->th_off*4;if(datasize>0){char*data=(char*)th+th->th_off*4;packetinfo.datas=std::string(data,datasize);}_packets.push_back(packetinfo);}}}}staticDWORDWINAPIThreadFunc(void*arg){SnifferThread*pthis=(SnifferThread*)arg;pthis->run();return0;}CComAutoCriticalSection_lock;boolis_stop;HANDLE_handle;std::list<pcap_t*>_cap_handles;std::list<PacketInfo>_packets;};
解决方案三:
这个是C语言的??

时间: 2024-09-08 15:16:11

c#下怎么获得远程主机发到本机的数据包?的相关文章

python解析发往本机的数据包示例 (解析数据包)_python

tcp.py 复制代码 代码如下: # -*- coding: cp936 -*-import socketfrom struct import *from time import ctime,sleepfrom os import system system('title tcp sniffer')system('color 05') # the public network interfaceHOST = socket.gethostbyname(socket.gethostname())

phpddos攻击的解决办法(服务器发外网发送大量数据包)

先看源码  代码如下 复制代码 <?php set_time_limit(999999); $host = $_GET['host']; $port = $_GET['port']; $exec_time = $_GET['time']; $Sendlen = 65535; $packets = 0; ignore_user_abort(True); if (StrLen($host)==0 or StrLen($port)==0 or StrLen($exec_time)==0){      

java如何实现 获取固定IP 发来的所有数据包(端口号未知)

问题描述 我想实现获取某个固定IP发来的所有的数据包,不管是那个端口发来的都要能得到,java编程如何实现?谢谢!!!!! 问题补充:我主要是不知道怎么写监听端的程序,那个IP的数据发往我的电脑的端口是未知的,小弟高分献上!!!! 问题补充:enet_java 写道 解决方案 winpcap不难的,因为有现成的东西可以调用其实你这个就是类似抓包工具,只不过你只要某些特定的包而已,就是抓包加过滤我做过类似的东西,就是java调用winpcap的,很简单jni实现java通过c++去调用winpca

linux下关于ffmpeg怎么将视频解码然后打包成rtp包发送出去。

问题描述 linux下关于ffmpeg怎么将视频解码然后打包成rtp包发送出去. 做流媒体传输,需要用ffmpeg 将视频解码,然后通过rtp发送给vlc播放,但是怎么将得到的 一帧数据打包?直接用得到的AVFram结构体用rtp发送出去吗?求各位大神帮忙解惑.

建立连接时无法将数据包发送给任意主机,帮忙看下代码,看怎样可以建立起通讯关系。我在调试是总是出错!

问题描述 voidSendData(byte[]data){try{IPAddressips=IPAddress.Parse(ControlIp);//("192.168.1.1");192.168.10.1IPEndPointipe=newIPEndPoint(ips,int.Parse(Port));//把ip和端口转化为IPEndPoint实例;1376UdpClientc=newUdpClient(23456);//创建一个Socketc.Connect(ipe);//连接到服

link环境下制作一款《订餐软件》,如何包帐和水帐转变,主要是复单这块的问题怎么处理,谢谢

问题描述 link环境下制作一款<订餐软件>,如何包帐和水帐转变,主要是复单这块的问题怎么处理,谢谢 link环境下制作一款<订餐软件>,如何包帐和水帐转变,主要是复单这块的问题怎么处理,谢谢 解决方案 不知道你说的转变是什么意思,你可以问下你的客户,按照他们的需求来设计.

tinyos-在tinyOS下写nec程序,在一组无线节点中进行数据包转发及打印

问题描述 在tinyOS下写nec程序,在一组无线节点中进行数据包转发及打印 10C 选取一个节点作为数据源节点,向网络中的其它节点进行数据包的转发,并将数据包中的内容打印出来. 解决方案 tiny OS第一次听说.有空去百度一下看看.先帮楼主顶下先!

linux下如何使用正则表达式regex库对通过libpcap在线抓的数据包进行筛选?

问题描述 linux下如何使用正则表达式regex库对通过libpcap在线抓的数据包进行筛选? linux下有一个用c写的通过libpcap抓取数据包的程序,如何通过正则表达式库regex对数据包进行筛选?有大神的话请贴一部分代码什么的,,, 解决方案 libpcap程序里,主体通过pcap_loop或者pcap_dispatch进行循环,需要提供报文的回调函数 在回调函数里面,对报文进行解析,逐层剥离协议头(ip->tcp->7层) 根据需要进行7层解析(例如解析http字段,可选) 对解

映射-java实现遍历某个包下的Class,注意不是自己写的包。是Java自身的吧。如:java.io

问题描述 java实现遍历某个包下的Class,注意不是自己写的包.是Java自身的吧.如:java.io java实现遍历某个包下的Class,注意不是自己写的包.是Java自身的吧.如:java.io包下的所有Class和interface 解决方案 简单说一下方法(假设你要找java.io包下的class)String javaHome = System.getProperty(""java.home"");JarFile jf = new JarFile(j