raw socket

一个很newbee的例子,可惜还得改

 1 import sys
 2 import time
 3
 4 import socket
 5 import struct
 6
 7 import random
 8
 9 def SendPacketData (Buffer = None , DestIP = "127.0.0.1" , DestPort = 10000) :
10     """SendPacketData"""
11
12     if Buffer is None :
13         return False
14
15     try:
16         Socket = socket.socket(socket.AF_INET,socket.SOCK_RAW)
17         Socket.setsockopt(socket.IPPROTO_IP,socket.IP_HDRINCL,1)
18         Socket.setsockopt(socket.SOL_SOCKET,socket.SO_SNDTIMEO,2000)
19
20     except:
21         Socket.close()
22         return False
23
24     try:
25         Socket.sendto(Buffer,0,(DestIP , DestPort))
26
27     except:
28         Socket.close()
29
30     return True
31
32 def SetPacketAddress (Number = 1) :
33     """SetPakcetAddress"""
34
35     return [".".join(["%d" % random.randint(1 , 0xFF) for i in range(0,4)]) for n in range(0 , Number)]
36
37 def SetPacketData (Length = 32) :
38     """SetPacketData"""
39
40     return "".join(["%s" % chr(random.randint(0 , 255)) for n in range(Length)])
41
42 def SetPacketCheckSum (Buffer = None) :
43     """SetPacketCheckSum"""
44
45     if Buffer == None :
46         return False
47
48     if len(Buffer) % 2 :
49         Buffer += ‘/0‘
50
51     return ~sum([(ord(Buffer[n + 1]) << 8) + ord(Buffer[n]) for n in range(0 , len(Buffer) , 2)])
52 #or return ~sum([ord(Buffer[n]) + ord(Buffer[n + 1]) * 256  for n in range(0 , len(Buffer) , 2)])
53
54 def SynSendInit (DestIP = "127.0.0.1" , DestPort = 80) :
55     """SynSendInit"""
56
57     IpHdrLen = 20
58     TcpHdrLen = 20
59
60     IpVerlen    = (4 << 4 | IpHdrLen / 4)
61     IpTotal_len = socket.htons(IpHdrLen + TcpHdrLen)
62
63     IpDestIP = struct.unpack(‘i‘,socket.inet_aton(DestIP))[0]
64     IpSourceIP = struct.unpack(‘i‘,socket.inet_aton(SetPacketAddress()[0]))[0]
65
66     TcpSport = socket.htons(random.randint(1024 , 65000))
67     TcpDport = socket.htons(DestPort)
68
69     TcpLenres = (TcpHdrLen / 4 << 4 | 0)
70     TcpSeq = socket.htonl(int(time.time()))
71
72     Buffer = struct.pack("LLBBHHHLLBBHHH",IpSourceIP,IpDestIP,0,socket.IPPROTO_TCP,socket.htons(TcpHdrLen)
73                                          ,TcpSport,TcpDport,TcpSeq,0,TcpLenres,2,socket.htons(8192),0,0)
74     TcpChecksum = SetPacketCheckSum(Buffer)
75
76     Buffer = struct.pack("BBHHHBBHLL",IpVerlen,0,IpTotal_len,1,0x40,255,socket.IPPROTO_TCP,0,IpSourceIP,IpDestIP)
77     IpChecksum = SetPacketCheckSum(Buffer)
78
79     tcpcsp = struct.pack("L",TcpChecksum)
80     ipcsp = struct.pack("L",IpChecksum)
81
82     return struct.pack("BBHHHBBHLLHHLLBBHHH",IpVerlen,0,IpTotal_len,1,0x40,255,socket.IPPROTO_TCP
83                                             ,(ord(ipcsp[1]) << 8) + ord(ipcsp[0]),IpSourceIP,IpDestIP
84                                             ,TcpSport,TcpDport,TcpSeq,0,TcpLenres,2,socket.htons(8192)
85                                             ,(ord(tcpcsp[1]) << 8) + ord(tcpcsp[0]),0)
86
87 def SynSendMain (DestIP = "127.0.0.1" , DestPort = 80) :
88     """SynSendMain"""
89
90     return SendPacketData(SynSendInit(DestIP , DestPort) , DestIP , DestPort)
91
92 if __name__ == "__main__" :
93     try:
94         SynSendMain()
95     except:
96         pass
时间: 2024-10-13 01:15:00

raw socket的相关文章

Linux raw socket

Linux raw socket ========================================== 1. 为什么要详细了解raw socket呢? ?其实很早以前就对原始套接字有了一定的了解,那时候还做过一个小的抓包程序,当时以为对原始套接字很熟悉了,但是最近在看nmap的时候被其中的一句话给整迷糊了. ?在<Nmap Network Discovery III>的SYN scan章节中文中提到通过raw socket构造一个SYN包发给目标端口以后,如果目标端口发回了SY

raw socket 发送数据包

TRawSocket = class(TObject) private buf: array[0..BUFLEN - 1] of char; FdwNotifyWnd: Cardinal; hsocket: Cardinal; str: string; public constructor Create; destructor Destroy; override; function createSocket: Integer; procedure destroySocket; function

python 使用raw socket进行TCP SYN扫描

1. TCP SYN扫描 端口扫描常用于用于探测服务器或主机开放端口情况,被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务.端口扫描是向一定范围的服务器端口发送对应请求,以此确认可使用的端口.虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段. TCP SYN扫描是端口扫描众多方式中的一种,其他方式包括TCP扫描,UDP扫描,ACK扫描,窗口扫描和FIN扫描等. TCP SYN扫描是另一种TCP扫描.端口扫描工具不使

python 使用Raw Socket进行以太网帧注入

1. 帧注入 对于以太网帧和Raw Socket的介绍可参考之前的一篇博文利用Raw Socket进行以太网帧嗅探.帧注入的特点: 可以将原数据格式的包注入到网络中. 在模拟网络应答方面很强大. 原始套接字包结构具有不可延展性. 随机注入 如果你可以随机注入数据到网络上的话,你就可以向网络上发送任何数据.^_^ 2. 代码实验 进入python运行环境,需要加上root权限.(sudo python). >>> >>> import socket >>>

python 利用Raw Socket进行以太网帧嗅探

1. Raw Socket基础 提供了一种方法来绕过整个网络堆栈遍历和直接将以太网帧输送到一个应用程序. 有很多种方法来创建raw sockets,例如AF_PACKET,PF_PACKET.这里使用PF_PACKET,它是linux系统上才有的选项,如果是windows或者是mac的系统的话,可以使用AF_PACKET. 1.1 PF_SOCKET 在链路层接收和发送包得应用接口. 所有接收到的包都包含完整的头部和数据部分. 所有发送的包都会由内核无更改的传递到媒介中. 支持使用Berkley

C#之Raw Socket实现网络封包监视

同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本机的IP包,通过原始套接字,我们也可以更加自如地控制Windows下的多种协议,而且能够对网络底层的传输机制进行控制.  在本文例子中,nbyte.BasicClass命名空间实现了RawSocket类,它包含了我们实现数据包监视的核心技术.在实现这个类之前,需要先写一个IP头结构,来暂时存放一些有

python raw socket 介绍

因为要使用 python 底层发包模块,也就是 raw socket 发包模式,所以在此深入了解一下 python socket 通信. 涉及到的函数: import socket socket() setsockopt() sendto() recvfrom() 因为使用的是原始套接字,所以我们不使用bind/connect函数,参照<unix 网络编程> bind 函数仅仅设置本地地址.就输出而言,调用bind函数设置的是将用于从这个原始套接字发送的所有数据报的源IP地址.如果不调用bin

C#之Raw Socket网络封包监视源码

大家可以建立一个Windows Form应用程序,在下面的各个文件中添加对应的源码: //RawSocket.csnamespace ReceiveAll{ using System; using System.Net; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Windows.Forms;  [StructLayout(LayoutKind.Explicit)] public str

用C语言socket RAW功能实现同一台主机两个网口间数据收发

1,本例子使用一台PC,有两个网口,OS为CENTOS 6.8,然后使用两条网线分别都连接到同一个交换机上,当数据经过交换机时,交换机的数据灯会闪烁,否则就没有数据通过交换机. 2,开始测试,刚开始理所当然的想到的是TCP Server/TCP Client模式,建立socket     int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);     struct sockaddr_in server_sockaddr;     server_so