2011-12-07 3 views
0

MAC 주소 생성기를 만들고 현재이 문제가 있습니다. 두 개의 0으로 변수를 정의하는 방법

mac1="001122334455" 
mac2="001122334695" 

mac1 = [mac1[x:x+2] for x in xrange(0,len(mac1),2)] 
mac2 = [mac2[x:x+2] for x in xrange(0,len(mac2),2)] 
k=0 
for item in mac1: 
    mac1[k] = "%d" % int(mac1[k], 16) 
    mac2[k] = "%d" % int(mac2[k], 16) 
    mac1[k]=int(mac1[k]) 
    mac2[k]=int(mac2[k]) 
    k=k+1 

while mac1 != mac2: 
    #print mac1 

    print "%X0:%X:%X:%X:%X:%X" % (mac1[0], mac1[1], mac1[2], mac1[3], mac1[4], mac1[5]) 
    mac1[5] = int(mac1[5]) + 1 
    if int(mac1[5]) > 255: 
     #mac1[5] = 00 
     mac1[4] = int(mac1[4]) +1 
     if int(mac1[4]) > 255: 
      mac1[3] = int(mac1[3]) + 1 
      if int(mac1[3]) > 255: 
       mac1[2] = int(mac1[2]) +1 
       if int(mac1[2]) > 255: 
        mac1[1] = int(mac1[1]) +1 

은 정말 I [5] = 대신 두 0 00 I 하나만 0 얻을 MAC1 정의 처음부터 다섯 번째 바이트를 생성하기 시작해야?

당신은 항상 0로 저하됩니다 00 같은 정수를 설정할 수 없습니다
+0

은 "'교체 %의 X0 참조 : % X % X % X % X % X ""% 02X : % 02X : % 02X : % 02X : % 02X : % 02X "'-하지만 조금 더 짧은 해결책을 볼 수도 있습니다. – eumiro

+0

솔루션이 효과를 발휘했습니다. 감사합니다. – Thomas

+0

문자열 조각을 사용하는 것이 쉬프트 및 개조 작업을 수행하는 것보다 쉽습니다 (아래 솔루션 참조). – Dave

답변

0

하나 개의 숫자로 전체 맥을 치료하기 훨씬 더 간단 :

mac1 = 0x1122334455 
mac2 = 0x1122334695 
for i in xrange(mac1, mac2+1): 
    s = "%012x" % i 
    print ':'.join(s[j:j+2] for j in range(0,12,2))) 

Display number with leading zeros

0

, 당신은으로 평가 해당 번호를 원하는 파이썬을 말할 것이다 (예를 0123의 경우) 정수의 앞에 0을 넣어 파이썬 2.X에서, 그 사실에 추가! 도전적으로 당신이 원하는 것은 아닙니다. 파이썬 3.x에서 0integer은 전혀 허용되지 않습니다!

0 대신 00을 원할 경우 문자열을 사용해야합니다.

관심이 있으신가요? mac1mac2 사이에 다양한 Mac을 생성 하시겠습니까? 관심이 있으시면보다 우아한 해결책이 있다고 생각합니다.


편집 :이 0 and 255의 정수로 내부적으로 작동하기 때문에

근무 솔루션은 startend 값이 정수하지 진수 값이며, 시작과 마무리 사이의 MAC 주소의 16 진수 값을 인쇄합니다.

start = [0,11,22,33,44,55] 
end = [0,11,22,33,46,95] 

def generate_range(start, end): 
    cur = start 

    while cur < end:  
     cur[5] = int(cur[5]) + 1 

     for pos in range(len(cur)-1, -1, -1): 
      if cur[pos] == 255: 
       cur[pos] = 0 
       cur[pos-1] = int(cur[pos-1]) + 1 

     yield ':'.join("{0:02X}".format(cur[i]) for i in range(0,len(cur))) 

for x in generate_range(start, end): 
    print (x) 
+0

예, 그렇게하려고합니다. 더 우아하게 그것을하는 방법 어떤 정보든지 좋을. – Thomas

+0

나는 당신이 '255'와 비교하고 있다는 것을 알았지 만 당신은 2 개의 포지션을 가지고있다. 나는 16 진수도 사용하고 있다고 가정한다. – Serdalis

+0

예 저는 16 진수를 사용하고 있습니다. – Thomas

관련 문제