1
我注意到,與python-nmap,我可以做到這一點:除非你運行它作爲根如何從附近的主機,在Python中檢索MAC地址?
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nmap
>>> n = nmap.PortScanner()
>>> n.scan(hosts='192.168.1.0/24', arguments='-sP')
{'nmap': {'scanstats': {'uphosts': u'6', 'timestr': u'Sat Oct 4 21:10:10 2014', 'downhosts': u'250', 'totalhosts': u'256', 'elapsed': u'2.69'}, 'scaninfo': {}, 'command_line': u'nmap -oX - -sP 192.168.1.0/24'}, 'scan': {u'192.168.1.104': {'status': {'state': u'up', 'reason': u'conn-refused'}, 'hostname': u'Mikes-MBP', 'addresses': {u'ipv4': u'192.168.1.104'}}, u'192.168.1.131': {'status': {'state': u'up', 'reason': u'conn-refused'}, 'hostname': u'Aidana', 'addresses': {u'ipv4': u'192.168.1.131'}}, u'192.168.1.133': {'status': {'state': u'up', 'reason': u'conn-refused'}, 'hostname': u'vm-trusty-desktop', 'addresses': {u'ipv4': u'192.168.1.133'}}, u'192.168.1.135': {'status': {'state': u'up', 'reason': u'conn-refused'}, 'hostname': u'android-d79f5b3256db8e11', 'addresses': {u'ipv4': u'192.168.1.135'}}, u'192.168.1.1': {'status': {'state': u'up', 'reason': u'syn-ack'}, 'hostname': '', 'addresses': {u'ipv4': u'192.168.1.1'}}, u'192.168.1.129': {'status': {'state': u'up', 'reason': u'syn-ack'}, 'hostname': u'DiskStation', 'addresses': {u'ipv4': u'192.168.1.129'}}}}
>>> n.all_hosts()
[u'192.168.1.1', u'192.168.1.104', u'192.168.1.129', u'192.168.1.131', u'192.168.1.133', u'192.168.1.135']
但是NMAP不會咳嗽了MAC地址。但是,當我關閉Python會話時,我可以立即運行arp -an
並獲取所有找到的主機及其相應MAC地址的轉儲。
有沒有乾淨的方式來獲得這些數據直接在Python中,沒有
- 需要root權限,或
- 不必手動解析
arp
輸出?
謝謝。
FWIW,我的系統(Mepis的11)上我需要以root運行'arp'。 – 2014-10-05 03:15:15
有趣,感謝您的信息。在Ubuntu和Mac OS X上,默認配置都允許'arp'作爲非特權用戶運行。 – mikepurvis 2014-10-05 19:07:49
早期版本的Mepis(可能)允許它,但是這不是;除非你是root用戶,否則你甚至不能運行'ifconfig'。 Mepis默認不啓用'sudo',你必須使用'su'。 OTOH,我也運行Puppy Linux,以root身份運行是非常正常的。 :) – 2014-10-06 13:08:28